需要发布iBoutlet对象



我在内存发布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方法。当您使用对象时,您应该始终记住释放它。该属性与内存问题无关。

最新更新