黑马程序员--O-C内存管理

来源:互联网 发布:mac 文件夹半透明 编辑:程序博客网 时间:2024/06/05 09:55

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

由于在O-C开发中,要用到很多对象,而O-C不会自动释放内存,所以需要管理内存。

O-C内存管理

Object C用引用计数的方式进行内存管理,由于所有的对象都继承于NSObject,因此所有的对象都可以接受NSObject的三个方法:

-(id)retain;

-(void)release;

-(unsigned)retainCount;

retain方法将对象的引用计数加一并返回该对象,release将引用计数减一,retainCount方法返回对象当前的引用计数。

当采用newalloccopy方法创建一个对象时,引用计数加1。当一个对象的引用计数被置为0后,系统会自动向对象发送一个dealloc消息,将其占有的资源释放。通常情况下,如果一个对象的初始化过程调用了其他资源,则应该重写改对象的dealloc过程,保证在对象的销毁期正确释放这些资源。


dealloc方法的重写:
dealloc
-(void)dealloc{
[super dealloc];//一定要调用父类的dealloc方法,并放在最后
}

@property(参数1,参数2)属性
参数分三类:读写属性、setter处理和原子性。
读写属性:readonly只读和readwrite读写。只读就是只能调用get方法,读写是默认的,get和set方法都能调用。
setter处理:assign、retain、copy。assign直接赋值,用于基本数据类型;retain释放原来的值,保存新值,用于继承NSObject的对象;copy释放原来的值,copy新值.
原子性:atomic和nonatomic。atomic多线程安全,占内存.nonatomic不提供线程安全,一般iphone开发用nonatomic
@property (retain) Notebook *note;
相当于:
在.h文件中
@property Notebook *not;
加上在.m文件中
-(void)setNotebook:(Notebook *)note{
if(_note != note){
[_book release];
_book = [book retain];
}
}


BOOL类型的get和set方法,例:
@property ( getter = isOn) BOOL machineOn ;//一般都以is博哦了
@property给get和set方法重命名方式:
@property (nonatomic, getter = )int num;


retainCount值为unsigned long,用%zi(z无符号(正负号))

0 0