我在内存发布iboutlet对象方面有困难。请有人建议我们在没有属性的情况下创建Iboutlet对象时该怎么办,需要发布它吗?如果需要发布...为什么我们要发布
答案是是。
使用[setValue:ForKey:]
运行时将对象连接到IBOutlet
。此功能将找到私有实例变量,保留目标并将其设置为实例变量。请访问此处iOS开发人员库以了解更多信息。
我强烈建议您阅读文章,因为许多iOS框架可以通过键值合规性访问属性([setValue:ForKey:]
或[valueForKey:]
),而不是直接调用Geters/setters/instance变量。
IBOutlet
不会更改属性的所有权语义。如果您不使用ARC,则必须像其他任何属性一样释放保留对象。
只是将其设置为"弱"。然后,您对弧线很好。
为什么不只是拥有私人iboutlet属性,以使事情变得更清晰,更明确。我总是亲自这样做:
MyClassName.m
@interface MyClassName ()
@property (nonatomic, weak) IBOutlet NSObject *myPropertyNameForAnOutlet;
@end
@implementation MyClassName
...
@end
您不是该对象的所有者。因此,无需发布iBoutlet对象。如果您在iboutlet对象上使用@property(非原子,保留),则必须在dealloc中释放该对象。
看高级内存管理编程指南
您不得放弃您不拥有
答案是是...
我也对此感到困惑,但请尝试:
打开XIB文件
ONEN助理编辑窗口,并在Xib IB文件附近获取.H文件代码
在IB文件中选择一个对象(一个没有引用任何var的对象)
ctrl单击它,然后选择:"新参考插座"按钮
将行拖到@interface {}节中的.h代码文件
给您的新var(" aaa")
命名(请注意,没有创建属性" AAA")
现在Xcode为您完成了所有魔术,...
在.m文件中,您可以在DealLoc方法中找到:
- (void) dealloc {
[aaa release];
[super dealloc];
}
so ...如果苹果发布它,似乎保留了通过XIB文件加载的默认iboutlet vars ...
编辑:
这是Apple Doc中的重点:
您不是对象的所有者,因此您不发布它。
您通过保留,复制或创建(init/alloc)对象成为所有者。只有这样,您就是对象的(s之一)所有者,并且在使用对象完成后需要释放它。提前更多信息检查可可核能 - 内存管理
我希望这可以解释为什么您不必释放对象。
即使您没有将其设置为属性,属性也会参考setter和getter方法。当您使用对象时,您应该始终记住释放它。该属性与内存问题无关。