I used Interface Builder to connect GUI elements to IBOutlet in view controller, but not sure when do I need to release them, in viewDidUnload or dealloc? Or both?
Thanks!
假设它们是属性,您应该nil
在 viewDidUnload 和 dealloc 中将它们设置为,确保使用 setter。所以例如
self.imageView = nil;
self.segmentControl = nil;
/* etc */
将 retain 属性设置为 nil 具有释放对象并将实例变量设置为 nil 的效果(因此即使没有在两者之间获得新对象,再次执行相同的操作也是安全的)。
viewDidUnload
当您的视图控制器的视图已从内存中弹出时调用,这可能发生在发生内存警告并且您的视图控制器当前未使用其视图时。如果您为自己保留了一些子视图(隐含地,通过“保留”设置器或故意)并且不释放它们,它们将留在内存中。您不希望他们这样做,因为您需要在收到内存警告时释放尽可能多的内存,并且如果系统范围内没有足够的内存释放,您或其他进程可能会被终止。因此,既要善待您的用户,又要成为一个好公民。
无论您有保留或分配属性,同样的建议都适用;如果它们被保留,则将属性设置为 nil 将释放,如果它们只是被分配,则将属性设置为 nil 将阻止您保持悬空指针。
您应该在 dealloc 中释放 IBOutlets。
在 viewDidUnload 中,您应该释放您在 viewDidLoad 中创建或保留的任何内容。