为什么要在Objective-C中自动释放一个人自己的属性?

时间:2012-09-27 19:31:58

标签: 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];
}

1 个答案:

答案 0 :(得分:1)

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

这相当于

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

假设setter具有默认行为