解释Apple对“viewDidUnload”中的nil对象的建议?

时间:2011-03-30 00:39:47

标签: iphone objective-c dealloc viewdidload

我会对能够在“viewDidUnload”中提供有关Apple的建议(在核心数据教程中找到)的更多信息的任何人感兴趣。例如:

  • 为什么这很重要?释放nil'ing之间有什么不同?
  • 这是最好的做法/我没有这样做,也没有看到我在一些我看过的iPhone示例代码中没有想到的?

代码:

// The implementation of viewDidUnload should relinquish ownership 
// of anything created in viewDidLoad that can be recreated.

- (void)viewDidUnload {
  self.eventsArray = nil;
  self.locationManager = nil;
  self.addButton = nil;
}

- (void)dealloc {
  [managedObjectContext release];
  [eventsArray release];
  [locationManager release];
  [addButton release];
  [super dealloc];
}

2 个答案:

答案 0 :(得分:5)

将属性设置为nil也会释放它们(假设setter方法释放旧值)。

此外,将属性设置为nil意味着之后可能最终被发送给他们的任何邮件都会被nil吞没并被忽略。在它们被简单释放的情况下,对象可能会被释放并在内存中被覆盖,但是它们仍然可以向它们发送消息(现在被发送到内存中覆盖它们的任何内容),可能导致崩溃,异常或其他出乎意料的行为。

答案 1 :(得分:0)

当我们的内存不足时,将调用viewDidUnload方法。在内存不足的情况下,xib将从内存中释放以释放应用程序的内存。但是如果我们仍然在我们的应用程序中保留nib对象,这将不够有效。因此,当我们在viewDidUnload中将我们的nib对象设置为nil时,我们正在帮助释放更多内存。