释放或不释放按钮(其内容是从笔尖加载的),这是个问题

Posted

技术标签:

【中文标题】释放或不释放按钮(其内容是从笔尖加载的),这是个问题【英文标题】:To release or not to release a button (whose content is loaded from a nib), that is the question 【发布时间】:2010-06-30 21:21:45 【问题描述】:

我有一个非常经典的类,其中包含按钮和标签等...:

@interface ExerciseViewController : UIViewController 
// Hardcoding for outlets to XIB file

// Outlets can be passed only as singe variables in Interface Builder.
// Therefore, we can only declare stupid variables, not arrays of buttons.

// Bid array

// Labels S,W,N,E
IBOutlet UILabel *labelSouth;
IBOutlet UILabel *labelWest;
IBOutlet UILabel *labelNorth;
IBOutlet UILabel *labelEast;

当然,所有这些属性都会保留:

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

我只是想知道我是否必须在我的班级的 dealloc 方法中释放所有这些项目:

- (void)dealloc 
[super dealloc];
// Release all GUI objects;

那么,我应该拿走我的所有财产并向他们每个人发送一份释放吗?我倾向于相信是的,但我更愿意问。

问候, 苹果92

【问题讨论】:

【参考方案1】:

是的,如果你retain,你必须release

【讨论】:

【参考方案2】:

如果你的类保留了一个对象,你就要对它负责,并且必须在以后释放它。这是保留/释放内存管理的基础。

请参阅Apple documentation on memory management rules。

【讨论】:

【参考方案3】:

据我了解,在使用 XIB 文件中的对象时,您要将它们附加到的属性应该是(非原子的,分配的),并且您不应该在 dealloc 中释放它们。原因是 XIB 加载系统负责它创建的对象的内存管理。

【讨论】:

以上是关于释放或不释放按钮(其内容是从笔尖加载的),这是个问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中不释放视图

Play framework/Netty 不释放socket

如何在按下并释放一次按钮时打开 LED,然后通过再次按下和释放将其关闭?

初始化后直接释放内容视图控制器的弹出框

input输入内容 释放按钮

如何释放内存?