2011-03-22 27 views
1

为什么自己使用....什么是主要的区别是调用没有自我,将直接并调用访问变量通过自会调用的set/get方法self.something = manything;自函数用于

回答

0

意义。有什么不同 ?

因为你需要关心Objective-C中的内存,当你做什么something = manything;许多东西都附着在某物上,而以前附着在某物上的物体会丢失。

而且要做的好事是在设置新对象之前使用设置方法来注意释放旧对象。你可以记住,设置一些最好使用self.something


一个例子仅仅是明确的:

1)如果这样做(假设myArray的是一个属性):不好的情况下

NSArray *tmpArray = [NSArray arrayWithObjects:@"obj1", @"obj2", nil]; 
myArray = tmpArray; 

第一行建立一个autoreleased阵列,然后我们将这个数组分配给myArray。如果在myArray中有某个东西,它不会被释放,并且新的数组不会被保留。这会导致内存泄漏并在我们尝试访问myArray之后崩溃,因为autoreleased数组将被释放。

2)如果你这样做:好的情况下

NSArray *tmpArray = [NSArray arrayWithObjects:@"obj1", @"obj2", nil]; 
self.myArray = tmpArray; //Equivalent to [self setMyArray:tmpArray]; 

我们在这里调用访问方法,如果需要(无memomry泄漏这种方法会照顾releasinf旧的对象),并会保留新如果还需要分配对象(该数组现在由我们的属性保留,并且可以在furure中访问)。

=>恢复,这全是关于内存管理。

+0

这是对的,但你的答案假设某事是@property没有明确的iVar或明确的iVar也命名的东西,这并非总是如此。在这种情况下,'self.something = foo;'执行'[self setSomething:foo];''这是一个正在发送的Obj-C消息。 'something = foo;'意味着'自我>东西=富;'这是对iVar的直接分配,并绕过了setter中的任何逻辑,因此绕过了任何Key-Value观察。如果您使用KVO,那么通常只需要在init方法和dealloc中直接访问iVar。 – ipmcc 2011-03-22 13:15:03

0

无论何时,如果你想访问同一类的属性,我们一般使用您设置的变量&财产

self.(ObjectName) //for accessing getter & setter method. 

,如果你想使用其他类中的任何对象过于我们使用一个额外的好处是合成该对象&创建该类的对象,我们可以访问该类的成员变量。