奇怪的发现,当我使用拖放来创建一个新的IBOutlet时,如下所示,而不是@property:
@interface SkinChoosingView : UIViewController {
IBOutlet UIActivityIndicatorView * activityIndicator;
}
Xcode插入-release
并将出口设置为viewDidUnload
中的nil。我查看了viewDidLoad,但没有-retain
!这违背了我对内存管理的所有了解。
我认为苹果必须知道关于这个东西的一两件事,那么幕后发生的事情是什么?我从来没有从这些类型的IBOutlets泄漏,我从来没有发布它们。
答案 0 :(得分:3)
是的,它会在加载NIB文件时自动为您保留插座,除非您明确声明与插座关联的属性为assign
ed属性。
由于它保留了您的出口,您必须在viewDidUnload
中释放,因为在下次调用viewDidLoad
时将重新加载出口。
答案 1 :(得分:1)
答案是它使用“键值标量”,这意味着它调用-setValue:forKey:
,其"Default Search Pattern"。对于ivars,它的作用类似于[ivar autorelease]; ivar = [newvalue retain];
。
“当前的最佳做法”是将IBOutlet
粘贴在属性而不是ivars上(请参阅here)。这清楚地表明了正在使用的内存管理模式,并且对拼写错误更具弹性(例如,如果你拼错了ivar)。