objective-c - 为什么在 Objective-C 中一个人会自动释放自己的属性(property)?

标签 objective-c ios memory-management

这是一个代码示例来说明我的意思:

- (void) setup {
  [self setupObjectModel];
  [self setupStoreCoordinator];
}

- (void) setupObjectModel {
  NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];
  self.managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] autorelease];
}

最佳答案

万一managedObjectModelstrong属性或用属性 retain 定义,setter 将自动保留传递的参数,因此 autorelease这样做可以防止内存泄漏(如果不这样做,NSManagedObjectModel 的保留计数将为 2,尽管只有 managedObjectModel 指向它。)

这相当于

_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

假设 setter 具有默认行为

关于objective-c - 为什么在 Objective-C 中一个人会自动释放自己的属性(property)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12628765/

相关文章:

iphone - PullRefreshTableView 编辑

ios - Spritekit 物理和相机平滑

ios - 弹出 View Controller 后 UITableViewController 奇怪的行为

android - 如何接收来自 Firebase Analytics 的每日摘要电子邮件?

python - 为什么我的 python 2.7 进程使用大量内存?

iphone - IOS:如何创建主视图

objective-c - 获取鼠标下的窗口值

ios - 为什么在音频队列播放代码中调用 CFRunLoopRunInMode()?

javascript - Javascript中 native 内存和堆内存的区别解释

c++ - C++ 中带有 void 指针的单元测试函数