Iphone 我是否必须;“释放”;我声明为具有属性属性的IBOutlets的我的UI对象;保留;及;非原子的;?

Iphone 我是否必须;“释放”;我声明为具有属性属性的IBOutlets的我的UI对象;保留;及;非原子的;?,iphone,ipad,instruments,Iphone,Ipad,Instruments,我是否必须“释放”我声明为具有属性“retain”和“nonatomic”的IBOutlets的UI对象?我这样问是因为我有一个UI变量声明为 @interface MyViewController : UIViewController { IBOutlet UILabel *lblStatus; } @property (retain, nonatomic) IBOutlet UILabel *lblStatus; @end 而我的朋友也是这样 - (void)dealloc {

我是否必须“释放”我声明为具有属性“retain”和“nonatomic”的IBOutlets的UI对象?我这样问是因为我有一个UI变量声明为

@interface MyViewController : UIViewController 
{
IBOutlet UILabel *lblStatus;
}

@property (retain, nonatomic) IBOutlet UILabel *lblStatus;

@end
而我的朋友也是这样

- (void)dealloc 
{
  //[lblStatus release];
  [super dealloc];
}
由于注释掉了
lblStatus
UI变量,当我从导航堆栈弹出视图时,仪器似乎没有检测到任何泄漏


提前感谢您的帮助

因为它们被保留了,是的,你有责任释放它们。通常,对于视图控制器,这应该发生在
-viewDidUnload
中,如下所示:

- (void)viewDidUnload
{
    self.lblStatus = nil;
    [super viewDidUnload];
}

(使用合成的
retain
accessor设置属性值将在将实例变量设置为新值之前释放旧值。)

谢谢,Noah!如果我在dealloc方法中取消对“release”语句的注释,这也就足够了吗?还有,关于为什么仪器没有用“释放”声明来检测泄漏,有什么想法吗?再次感谢。不完全是。例如,如果您的视图被卸载并再次加载,如果您的视图控制器脱离屏幕,收到内存警告,然后再次出现在屏幕上,那么它将被重新启动,任何保留的插座(如标签)都可能会泄漏。@Pierre,不完全是;有可能笔尖加载系统足够智能,可以检测出插座已经连接好,而不必费心重新安装。不过,我不相信这一点,在我的应用程序中,我认为每个加载视图实际上都是从零开始的。