iphone - 使用自函数

标签 iphone objective-c ios memory-management

为什么使用 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/

相关文章:

ios - iPhone 不断发送 apple-site-association 请求

ios - 如何将 iOS App Preview 视频升级到 1080 x 1920?

iphone - TapJoy 崩溃 iPhone 应用程序

objective-c - NSInvocation 获取返回值 : called inside forwardInvocation: makes the returned object call dealloc:

iOS 创建 CAShapeLayer 蒙版的反面

ios - 在呈现另一个 View Controller 时,如何阻止 "from" View 变黑?

ios - 设置中的辅助功能大文本

iphone - 如何在最后一个单元格上启动 UITableView?

ios - swift - 无需重新加载自定义 UITableViewCell 即可设置 UILabel

ios - Swift:我的便利 init 没有看到正常的 init