标签:style blog ar color 使用 sp strong on 文件
self.nameVarPtr = [[ObjectName alloc] init]
nameVarPtr = [[ObjectName alloc] init]
上面这2种方法我们都见过,那两种赋值方式的区别何在呢?
self.nameVarPtr=xxx 这种赋值方式等价于调用 [self setnameVarPtr:xxx], 而setnameVarPtr:xxx的方法的实现又是依赖于@property的属性的,比如retain,assign等属性。我们申明xxx时,用的属性修饰符retain。当我们,使用self.xxx时,就使用了编译器为我们生成的setXXX方法。在该方法中的retainCount会被加1。
nameVarPtr = xxx 的赋值方式,仅仅是对一个指针进行赋值。nameVarPtr仅仅是一个指针变量,记录了xxx的地址。在这个过程中不会调用setter方法,不会调用setter方法,就和@property没有关系,从而,也和retain,assign等属性没有关系。这种赋值方式就是一个简单的指针赋值。
所以我们要区别好这2种赋值方法:
self调用setter方法的方式 ObjectName* tmp= [[ObjectName alloc] init]; self.nameVarPtr =tmp; //retainCount=2 [tmp release]; //retainCount=1
指针赋值方式,不会调用setter方法 nameVarPtr= [[ObjectName alloc] init]; // retainCount=1
对某个变量进行赋值操作的时候,尽量要写self.myObj = xxx; 这才是最可靠的方法。
标签:style blog ar color 使用 sp strong on 文件
原文地址:http://www.cnblogs.com/penger/p/4137816.html