__strong/__weak

2019-12-06  本文已影响0人  Abel0101

一、 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语言的结构体

上一篇下一篇

猜你喜欢

热点阅读