使用自我功能

时间:2011-03-22 09:56:35

标签: iphone objective-c ios memory-management

为什么使用自我...... self.something = manything;

的含义是什么?

2 个答案:

答案 0 :(得分:0)

主要区别在于调用没有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];

我们在这里调用访问器方法,如果需要,这个方法将负责释放旧对象(没有memomry泄漏),并且如果还需要它将保留新的assign对象(该数组现在由我们的属性保留并且可以在furure访问。)

=>要恢复,一切都与内存管理有关。

答案 1 :(得分:0)

每当你设置变量&的属性时如果你想访问同一个类中的属性,我们通常会使用

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

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

相关问题