美文网首页
iOS-工作两年后,再看引用计数

iOS-工作两年后,再看引用计数

作者: coder_那一抹刚吹过的风 | 来源:发表于2018-04-02 17:26 被阅读12次

    因为刚接触iOS那会儿,iOS开发已经进入到ARC的模式,所以直接过渡到了ARC编程模式。今天跟同事讨论问题,发现自己有些许理解有很大问题。不多BB,看代码。

    @interface People()
    @property (nonatomic, retain) NSArray *arr;
    @end
    @implementation People
    - (instancetype)init {
        self = [super init];
        if (self) {
            self.arr = @[@"hello world"];
            NSLog(@"%ld", [self.arr retainCount]);
        }  
        return self;
    }
    @end
    

    还是上面的代码,我们修改少许,改变self成立内部的代码为下面的代码
    1

            _arr = @[@"hello world"];
            NSLog(@"%ld", [_arr retainCount]);
    

    2

            _arr = @[@"hello world"];
            NSLog(@"%ld", [_arr retainCount]);
    

    3

            self.arr = @[@"hello world"];
            NSLog(@"%ld", [_arr retainCount]);
    

    公布一下上面的答案,2,1,1,2.
    上面的答案开始我是很不能理解了。还是里一位大佬(不语)的耐心讲解,解开了心中的诸多疑惑。

    在这里说明一下,如果你对@property还有疑问,我翻看我早先写的一篇文章,这里有关于Property的相关说明。来,咱们看源码,我跟大家分析一波。
    首先,着重强调:

    对象调动alloc方法,会自动让自己的引用计数+1

    成员变量赋值不会影响对象的引用计数

    其实这里我们主要给出@property生成的setter方法,大家应该就会有中豁然开朗的感觉。

    - (void)setArr: (NSArray *)arr {
         if(_arr != arr) {
                 [_arr release];
                 _arr = [arr retain];
          }
    }
    

    相关文章

      网友评论

          本文标题:iOS-工作两年后,再看引用计数

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