何时发布IBOutlet?

时间:2011-07-13 00:23:46

标签: release dealloc iboutlet

我使用Interface Builder将GUI元素连接到视图控制器中的IBOutlet,但不确定何时需要在viewDidUnload或dealloc中释放它们?或两者兼而有之?

谢谢!

2 个答案:

答案 0 :(得分:3)

假设它们是属性,您应该在viewDidUnload和dealloc中将它们设置为nil,确保使用setter。例如,

self.imageView = nil;
self.segmentControl = nil;
/* etc */

将retain属性设置为nil具有释放对象并将实例变量设置为nil的效果(因此即使不在其间获得新对象也可以再次执行相同的操作)。

当视图控制器的视图从内存中弹出时,将调用

viewDidUnload,这可能发生在发生内存警告且视图控制器当前未使用其视图时。如果您为自己保留了一些子视图(隐式地,通过“保留”设置器或故意保留)并且不释放它们,它们将保留在内存中。您不希望他们这样做,因为您需要在收到内存警告时释放尽可能多的内存,如果系统范围内没有足够的内存,则可以终止您或其他进程。因此,要善待用户并成为一名优秀的公民。

无论您是保留还是转让财产,都适用同样的建议;如果它们被保留,那么将属性设置为nil将释放,如果它们刚刚被分配,那么将属性设置为nil将阻止你保持悬空指针。

答案 1 :(得分:0)

您应该在dealloc中释放IBOutlets。

在viewDidUnload中,您应该释放您在viewDidLoad中创建或保留的任何内容。