黑马程序员技术交流社区
标题:
objective c内存管理
[打印本页]
作者:
nsswift
时间:
2015-6-9 20:11
标题:
objective c内存管理
本帖最后由 nsswift 于 2015-6-12 17:04 编辑
1、每个OC对象都有一个“引用计数器”,
(它占用四个字)节,
OC对象刚创建后引用计数的初始值为1,当该值为0的时候,他就会被回收,并且回收前向对象发送dealloc消息,如果重写delloc方法一定要调用super dealloc而且这句调用要放最后。
2、每当alloc或者retain一个对象的时候一定要进行release调用,不然会出现内存泄露。当应用计数为0时在进行release调用就会出现野指针错误,所以当引用计数为0的时候最好要对对象赋值为nil(为空指针发送消息不会出现错误)。
3、Set方法管理的最严谨的写法
- (void)SetCar:(Car *)car
{
if(_car != car) //判断是不是新传进来新对象
{
[_car release]; // 如果是,对旧对象进行一次release
_car = [car retain]; // 对新对象进行retain,同时将新车变旧车
}
}
复制代码
4、@property
@property (XXX) Car *car;
XXX=retain: release旧值,retain新值(适用于OC对象类型,跟第3条手动写法一样)
XXX=assign: 直接赋值(默认,适用于非OC对象类型比如基本数据类型int)
XXX=copy: release旧值,copy新值(NSString使用copy)。
XXX=readwrite:默认。同时生成setter和getter
XXX=readonly:只会生成getter的声明和实现。
作者:
七尺阳光
时间:
2015-6-9 21:38
好的 学习了
作者:
luguo
时间:
2015-6-10 09:23
围观学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2