我对内存释放IBOutlet对象感到困惑。当我们创建没有属性的IBOutlet对象时,有什么人建议做什么,需要释放它?如果需要释放......为什么我们要释放它
答案 0 :(得分:4)
答案是肯定的。
运行时使用IBOutlet
将对象连接到[setValue:ForKey:]
。此函数将查找私有实例变量,保留目标并将其设置为实例变量。请访问此处iOS Developer Library了解更多信息。
我强烈建议您阅读本文,因为许多iOS框架通过键值合规性([setValue:ForKey:]
或[valueForKey:]
)访问属性,而不是直接调用getter / setters / instance变量。
答案 1 :(得分:1)
IBOutlet
不会更改属性的所有权语义。如果您不使用ARC,则必须像其他任何属性一样释放保留的对象。
答案 2 :(得分:1)
只需将其设置为默认值,即“弱”。那你对ARC很好。
答案 3 :(得分:1)
为什么不拥有私有的IBOutlet属性,以使事情更清晰,更明确。我总是这样做:
MyClassName.m
@interface MyClassName ()
@property (nonatomic, weak) IBOutlet NSObject *myPropertyNameForAnOutlet;
@end
@implementation MyClassName
...
@end
答案 4 :(得分:1)
答案是肯定的......
我也对此感到困惑,但试试这个:
打开xib文件
onen assistant editor window并获取您的XIB IB文件附近的.h文件代码
在IB文件中选择了一个对象(一个没有引用任何var的对象)
按住ctrl键并选择:“新参考插座”按钮
将该行拖到@interface {}部分
中的.h代码文件中给你的新var(“aaa”)
命名(请注意,没有创建属性“aaa”)
现在Xcode已经为你完成了所有的魔力,并且......
你可以在dealloc方法中找到.m文件中的:
- (void) dealloc {
[aaa release];
[super dealloc];
}
所以...如果苹果发布它,似乎保留了通过XIB文件加载的默认IBOutlet变量...
修改强>
答案 5 :(得分:1)
您不是该对象的所有者。所以不需要释放IBOutlet对象。如果你在IBoutlet对象上使用@property(非原子,保留),那么你必须在dealloc中释放该对象。
看看Advanced Memory Management Programming Guide
您不得放弃您不拥有的对象的所有权
答案 6 :(得分:0)
您不是该对象的所有者,因此您不会将其释放。
您通过保留,复制或创建(初始化/分配)对象成为所有者。只有这样你才能成为对象的所有者之一,并且在完成对象时需要释放它。更多信息检查 Cocoa core competencies - Memory Management
我希望这能解释为什么你不必释放这个对象。
答案 7 :(得分:-1)
即使您没有将其设置为属性,该属性也会引用setter和getter方法。当您使用对象时,您应该始终记得释放它。该属性与内存问题无关。