【发布时间】:2011-03-22 09:56:35
【问题描述】:
为什么使用self ....self.something = manything;是什么意思
【问题讨论】:
标签: iphone objective-c ios memory-management
为什么使用self ....self.something = manything;是什么意思
【问题讨论】:
标签: iphone objective-c ios memory-management
主要区别在于不使用 self 调用将直接访问变量,而通过 self 调用将调用 set/get 方法。有什么区别?
因为您需要注意 Objective-C 中的内存,当您执行 something = manything; 时,很多东西都会附加到某物上,而之前附加到某物上的对象会丢失。
最好的做法是使用 set 方法,它会在设置新对象之前释放旧对象。你可以记住,要设置一些东西,最好使用self.something。
一个清楚的例子:
1) 如果你这样做(假设 myArray 是一个属性):BAD CASE
NSArray *tmpArray = [NSArray arrayWithObjects:@"obj1", @"obj2", nil];
myArray = tmpArray;
第一行创建一个自动释放的数组,然后我们将这个数组分配给 myArray。如果 myArray 中有某些内容,则它不会被释放并且新数组不会保留。当我们尝试访问 myArray 之后,这将导致内存泄漏和崩溃,因为自动释放的数组将被释放。
2) 如果你这样做:好的情况
NSArray *tmpArray = [NSArray arrayWithObjects:@"obj1", @"obj2", nil];
self.myArray = tmpArray; //Equivalent to [self setMyArray:tmpArray];
我们在这里调用访问器方法,如果需要,此方法将负责释放旧对象(没有内存泄漏),如果还需要它,将保留新的分配对象(数组现在由我们的属性保留,并且可以将来可以访问)。
=> 继续,一切都与内存管理有关。
【讨论】:
每当你设置一个变量的属性&如果你想访问我们通常使用的同一个类中的属性
self.(ObjectName) //for accessing getter & setter method.
另一个好处是,如果您也想使用其他类中的任何对象,我们用来合成该对象并创建该类的对象,我们可以访问该类的成员变量。
【讨论】: