一、 ARC中指针默认都是用__strong 修饰的,在ARC下下面两行代码意义完全一样:
__strong NSArray *arr0 = [NSArray array];
NSArray *arr1 = [NSArray array];
__strong 修饰符通常用来对变量进行强引用,主要有一下三个作用:
1、使用__strong 修饰的变量如果是自己生成的,则会被添加进自动释放器,在作用域结束后,会被release一次。
2、使用__strong 修饰的变量如果不是自己生成的,则会被强引用,即会被持有使其引用计数加1,在离开作用域后会被release 一次。
3、使用__strong 修饰的变量指针如果被重新赋值或被nil,则变量会被release一次。
二、__weak 修饰符通常用来对变量进行弱引用,其最大的用途是避免ARC环境下的循环引用,循环引用是ARC下造成内存泄漏的主要问题,__strong 修饰符主要有一下两个用途:
1、被__weak 修饰的变量仅供弱引用,不是使其引用计数增加。变量对象如果是自己生成的,则会被添加到自动释放池,会在离开作用域是被release一次,如果不是自己生成的,则在离开作用域后,不进行release操作。
2、被__weak 修饰的变量指针,变量如果失效,则指针会被自动置为nil,这是一种比较安全的设计方式,大量减少了野指针造成的异常。
三、ARC下牢记的原则:
1、不能使用retain、release、autorelease函数,不可访问retainCount属性
2、不能使用dealloc函数,可以覆盖写dealloc函数,但是在现实中不可调用父类的dealloc函数
3、不能使用NSAutoreleasePool,可以使用@autoreleasepool代替
4、对象型变量不能作为C语言的结构体
网友评论