【问题标题】:Releasing iVar IBOutlet vs Property IBOutlet发布 iVar IBOutlet 与属性 IBOutlet
【发布时间】:2011-08-28 05:38:57
【问题描述】:

谁能验证我的 dealloc 方法是否正确?由于我的 titleLabel 和 checkImageView 被保留,我在 dealloc 中释放它们。但是,我不会发布 mainImageView、doneButton 和 noteLabel,因为它们在实现过程中不会保留或分配。

@interface CheckMarkController : UIViewController  <UIAlertViewDelegate> {
IBOutlet UIImageView *mainImageView;
IBOutlet UIButton *doneButton;
IBOutlet UILabel *noteLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *titleLabel;
@property (nonatomic, retain) IBOutlet UIImageView *checkImageView;
@property (nonatomic, retain) Event *event;
@property (nonatomic, retain) Workout *workout;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

@end

- (void)dealloc {
//props
[titleLabel release];
[checkImageView release];
[event release];
[workout release];
[managedObjectContext release];

[super dealloc];

【问题讨论】:

    标签: iphone objective-c cocoa-touch memory-management memory-leaks


    【解决方案1】:

    如果您通过 Interface Builder 连接这三个项目,则需要释放它们。默认情况下保留插座。 KVC(Key Value Coding)用于设置网点。这意味着loadFromNib 将为您设置的每个出口调用setValue:withKey。这使用 @property 和它的 setter 方法,但如果没有设置(如你的情况)它默认保留对象。

    【讨论】:

    • 我明白了,这些泄漏不显示在 Instruments 中是否正常?
    • 已编辑以提供更多详细信息。根据我的经验,Instruments 在 KVC 方面存在问题。不过,其他人可能有更好的洞察力。
    • 谢谢马克。我已更正代码并将其添加到我的“陷阱”列表中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多