我使用Interface Builder将GUI元素连接到视图控制器中的IBOutlet,但不确定何时需要在viewDidUnload或dealloc中释放它们?或两者兼而有之?
谢谢!
答案 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中创建或保留的任何内容。