zoukankan      html  css  js  c++  java
  • [ios]iOS开发之self.abc = nil与[_abc release]的区别【转】

    前者使用property的点操作符,也就相当于调用了abc对应的set method,和这句是一样的:[self setAbc:nil];

    而后者没有通过property,直接访问了成员变量,调用了它的release方法。

    对于set method来说,用synthesize来让系统帮我们生成的set方法和如下的类似:

    - (void)setAbc:(id)newAbc
    {
          if(_abc != newAbc){
               [_abc release];
               _abc = [newAbc retain]; //是retain还是copy取决于你property声明时的attributes  
           }
    }
    如果新值和成员相等,就不需要进行重复的赋值了,不等的话,需要把新值赋给成员,同时,成员_abc原来的内容就不需要了,这里要先调用release进行释放。(这个具体的原因在那本讲Objective-C的书中写的很清楚,请查看)。
    因此在这里,调用self.abc = nil;
    就等于掉了[_abc release];  和_abc = nil;

    self.abc = nil;和[_abc release]; 都不一定释放对象,因为该对象还可能被别的引用,这里的操作的意图就是:别的地方用没用_abc我不知道,在这里的_abc我不用了。

    在用retain或者copy的property attributes的时候,self.abc = nil;等于如下语句:
    if(_abc!= nil)
    {
       [_abc release];
       _abc = nil; //message sent to nil returns nil.
    }
    所以用起来更简单一点。

  • 相关阅读:
    Django~1
    Codeforces Round#201(div1) D. Lucky Common Subsequence
    ACdream原创群赛(18)のAK's dream题解
    区间dp
    部署AlwaysOn第三步:集群资源组的健康检测和故障转移
    Join 和 App
    SSRS配置1:凭证和邮件
    巧用Alt 键
    把Excel的数据导入到数据库
    jvm系列:Java GC 分析
  • 原文地址:https://www.cnblogs.com/jinjiantong/p/3023796.html
Copyright © 2011-2022 走看看