• ARC机制之__strong具体解释


    ARC机制之__strong具体解释


    __strong  解析:


    默认情况下,一个指针都会使用 __strong 属性,表明这是一个强引用。这意味着,仅仅要引用存在,对象就不能被销毁。这是一种所期望的行为:当全部(强)引用都去除时,对象才干被收集和释放。


    只是, 有时我们却希望禁用这样的行为:一些集合类不应该添加其元素的引用。由于这会引起对象无法释放。在这样的情况下,我们须要使用弱引用(不用操心,内置的集合类就是这么干的),使用 __weak keyword。NSHashTable就是一个样例。

    当被引用的对象消失时,弱引用会自己主动设置为 nilCocoa Notification Center 就是这么一个样例,尽管这已经超出纯 Objective-C的语言范畴 



    自己更深理解:

    1.(weakstrong)不同的是:当一个对象不再有strong类型的指针指向它的时候,它就会被释放,即使改对象还有_weak类型的指针指向它;


    在OC中strong就相当于retain属性,而weak相当于assign。仅仅有一种情况你须要使用weak(默认是strong),就是为了避免retain cycles(就是父类中含有子类{父类retain了子类}。子类中又调用了父类{子类又retain了父类},这样都无法release)

      2.一旦最后一个指向该对象的strong类型的指针离开,这个对象将被释放,假设这个时候还有weak指针指向该对象,则会清除掉全部剩余的weak指针


    以下是笔者看书时遇到的疑问

    (1) : __strong在ARC关闭时是否可用

    (2): __strong修饰的变量,直接赋值时,赋值的变量的retain是否会自增(被赋值的变量retain是否会自减)

    (3): __strong修饰的变量在超出其作用域时retain是否会自减


    解答例如以下:

    (1): 能

    (2): 比如:

         int count  = 1;

        id __strong obj1 =nil;

            id __strong obj = [[NSObjectalloc] init];

            obj1 = obj;//obj1 持有obj 赋值对象的强引用 会导致obj retain自增

            NSLog(@"Retain count is %ld",CFGetRetainCount((__bridgeCFTypeRef)obj));

            NSLog(@"obj = %ld",CFGetRetainCount((__bridgeCFTypeRef)obj));

    打印例如以下:

    2015-07-22 17:23:22.169字典[724:25567] Retain count is 2

    2015-07-22 17:23:22.171字典[724:25567] obj = 2

    说明:(1) :当一个对象获得还有一个对象的强引用时,retain++;

    (2): 被赋值的变量retain是会自减

    (3):

        int count  =1;

       id __strong obj1 =nil;

       if(count){

           id __strong obj = [[NSObjectalloc] init];

            obj1 = obj;//obj1 持有obj 赋值对象的强引用 会导致obj retain自增

            NSLog(@"Retain count is %ld",CFGetRetainCount((__bridgeCFTypeRef)obj));

        }

        

        NSLog(@"Retain count is %ld",CFGetRetainCount((__bridgeCFTypeRef)obj1));

    __strong修饰的变量在超出其作用域时retain是会自减


  • 相关阅读:
    使用钉钉对接禅道的bug系统,实现禅道提的bug实时在钉钉提醒并艾特对应的开发人员处理
    Python3数据驱动ddt
    Python3发送邮件功能
    Python3的日志添加功能
    【最小生成树】BZOJ1016: [JSOI2008]最小生成树计数
    【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院
    【最小生成树+子集枚举】Uva1151 Buy or Build
    【最小生成树】UVA1494Qin Shi Huang's National Road System秦始皇修路
    【最小生成树+贪心】BZOJ1821: [JSOI2010]Group 部落划分 Group
    【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6944027.html
Copyright © 2020-2023  润新知