美文网首页
__strong/__weak

__strong/__weak

作者: Abel0101 | 来源:发表于2019-12-06 14:23 被阅读0次

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

    相关文章

      网友评论

          本文标题:__strong/__weak

          本文链接:https://www.haomeiwen.com/subject/gxgsgctx.html