Cocoa touch Cocoa Touch-取消分配IB门店

Cocoa touch Cocoa Touch-取消分配IB门店,cocoa-touch,Cocoa Touch,我过去常常这样声明iPhone的IBOutlets IBOutlet UILabel *myLabel 我刚发现正确的申报方式是 UILabel *myLabel; @property(nonatomic,retain) IBOutlet UILabel *myLabel; 但是,使用第二种正确的方法,您是否必须在-(void)dealloc方法中释放每个IBOutlet以避免内存泄漏?简而言之,它们应该以任何一种方式释放。在第二种方法中,您所做的只是创建一个getter/setter对,

我过去常常这样声明iPhone的IBOutlets

IBOutlet UILabel *myLabel
我刚发现正确的申报方式是

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

但是,使用第二种正确的方法,您是否必须在
-(void)dealloc
方法中释放每个IBOutlet以避免内存泄漏?

简而言之,它们应该以任何一种方式释放。在第二种方法中,您所做的只是创建一个getter/setter对,它不会在适当的时间处理释放。它有一些逻辑,知道在对象被替换时何时正确地取消分配,但它不能在那里进行最终清理,因为setter仍然以这种方式分配新对象


这样看:您必须取消分配您专门分配的对象。如果在整个代码过程中,或者通过NIB文件中的实例化数据,您的插座被分配了一个对象,那么在某个时候,您需要负责在它之后进行清理(除非它来自自动释放便利方法)。

很高兴我能帮上忙。我想在上面的回答中纠正一点:当setter用于替换(或只是设置)一个值(self.myLabel=newLabel)时,它实际上并不像我说的那样分配一个新对象。它确实增加了newLabel的保留能力(因为您的属性声明中有“保留”部分),所以您必须在dealloc中执行一个发布。