为什么使用 self ....self.something = manything;
的含义是什么
最佳答案
主要区别在于调用时不使用 self 将直接访问变量,而通过 self 调用将调用 set/get 方法。有什么区别?
因为在 Objective-C 中您需要小心内存,当您执行 something = manything;
时,许多东西附加到某物上,而之前附加到某物上的对象丢失了。
最好的做法是使用 set 方法,该方法负责在设置新对象之前释放旧对象。您只需记住,要设置某些内容,最好使用 self.something
。
举个简单的例子:
1) 如果你这样做(假设 myArray 是一个属性):坏的情况
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];
我们在这里调用访问器方法,这个方法将在需要时处理旧对象的释放(没有内存泄漏),如果还需要它,将保留新的分配对象(数组现在由我们的属性保留并且可以将来可以访问)。
=> 继续,这都是关于内存管理的。
关于iphone - 使用自函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5389436/