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.
    }
    所以用起来更简单一点。

  • 相关阅读:
    第五次作业
    第四次作业
    Java实验二
    java第一次作业
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
  • 原文地址:https://www.cnblogs.com/jinjiantong/p/3023796.html
Copyright © 2011-2022 走看看