黑马程序员技术交流社区

标题: ARC下单内存管理 [打印本页]

作者: 会飞得猪    时间: 2016-2-19 23:13
标题: ARC下单内存管理
总结:
1,当栈区的指向对象的局部变量随着代码块的结束,而被释放;那么,对象就没有了强指针引用了,所以也被释放。
2,当对象被指定为__week的弱指针时,对象也被释放。

Car *car = [[Car alloc] init];

car = nil;  //   此处执行完毕,car对象被回收

car.speed = 10;   //不会报错,也不是僵尸对象,所以检测僵尸对象也检测不出来


__weak Car *car2 = car;  //弱指针,执行这行代码就被释放

//---------------------ARC与多对象的内存管理

@property (weak,nonatomic) Dog *dog;

Person *p = [Person new];

Dog *d = [Dog new];

p.dog = d;

d = nil;  //  此句执行后,狗立即被释放

@property (strong,nonatomic) Dog *dog;
{
   
d = nil;  //  此句执行后,没被释放
}//----->   此处执行完后再被释放

//--------------------ARC下循环引用问题
两个强指针一旦相互引用,会造成无法释放

解决方案:
循环引入的对象中其中一个对象设置为strong 另一个设置为weak


//------------------ARC下@property参数
ARC中的@property
strong : 用于OC对象, 相当于MRC中的retain
weak : 用于OC对象,释放了之后,会将指针置为nil, 其他相当于MRC中的assign
assign : 用于基本数据类型, 跟MRC中的assign一样
copy : 一般用于NSString, 跟MRC中的copy一样


在ARC情况下解决”循环retain”的问题:@property一边用strong,一边用weak。

//------------------ARC的兼容和转换





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2