内存管理与视图控制器中的出口和属性

时间:2010-09-08 23:30:56

标签: iphone cocoa-touch memory-management

嘿伙计们,抱歉再次击败记忆管理(死)马。我知道这个问题在SO上已被多次询问,但我觉得那里的所有主题仍然缺少两条信息。让我提出我所知道的,以节省每个人的时间。

1)创建IBOutlet时,视图控制器会自动保留此插座。

1a)当你没有创建一个插座时,'framework'(nib?)会为你释放你的对象(比如uilabels或uiviews)。

2)当你做self.myOutlet = nil时,你有效地释放了一个插座(前提是你已经正确地合成了你的属性)。这是因为设定者释放出口并将其分配给零。

我不知道的是:

1)主要问题:如果你在viewDidUnLoad中做self.myOutlet = nil,你还需要在dealloc中做任何事吗?你能否假设viewDidUnload总是在dealloc之前调用?(因此你的保留视图被释放了?)

2)如果您没有合成该商店的房产,会发生什么?框架不应该自动释放吗?(因为你没有retain属性)如果你必须释放它,你是如何做到的以及在哪里(在viewDidUnload或dealloc中)?

如果有任何问题,请指出给我。任何澄清都会非常有用。

1 个答案:

答案 0 :(得分:1)

(#1)Apple医生说要同时做这两件事

  

另外,由于UIViewController中dealloc的实现细节,你还应该在dealloc中将出口变量设置为nil:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html

(#2)如果你没有合成一个属性,你仍然需要创建一个属性,并且最好保留 - 阅读链接。创建UI对象,自动释放并设置outlet属性(应该保留)。没有为你发布的版本,因为他们已经完成了他们应该做的发布 - 你保留了,所以你必须发布(在viewDidUnload和dealloc中)