NIB、setValue:forKey 和保留 (iOS)
我知道加载NIB时插座连接的一些机制,但我不确定。所以我问一些问题来确保我的知识。我假设这些都是真的,但是在参考文档中很难找到关于这些的提及。请指出错误和正确的事情。
我有一个像这样定义的 IBOutlet:(当然这不是推荐的方式)
@implementation
{
IBOutlet id var1;
}
@end
- NIB loader (alloc | keep) &自动释放所有顶级对象。因此它将在运行循环结束时释放,而不需要额外的保留。
- 连接 IBOutlet 是通过 KVC 完成的。
- KVC 主要使用访问器方法。
- KVC 其次使用 setValue:forKey。 IBOutlet 将由此方法处理,因为没有声明的属性或访问方法。
- setValue:forKey 保留新的值对象。
- setValue:forKey 释放旧的值对象。
- 因此连接到 IBOutlet 的顶级对象将被保留一次。所以我必须将其释放以进行释放。这就是为什么我必须在 dealloc 方法上释放连接到 IBOutlet 的对象的原因。
- 如果该对象连接了另一个IBOutlet(如IBOutlet),则应再次释放该对象以进行dealloc。
I know some mechanism of outlet connection when loading NIB, but I am not sure. So I'm asking some questions to ensure my knowledge. I assumed these things all true, but It's hard to find mention about these on reference documentation. Please point wrong and right things.
I have an IBOutlet defined like this: (Of course it's not recommended way)
@implementation
{
IBOutlet id var1;
}
@end
- NIB loader (alloc | retain) & autorelease all top-level objects. So it will be dealloc on runloop turn ends without additional retain.
- Connecting IBOutlets are done with KVC.
- KVC uses accessor method primarily.
- KVC uses setValue:forKey secondarily. And the IBOutlet will be handled by this method because there's no declared property or access method.
- setValue:forKey retains the new value object.
- setValue:forKey releases the old value object.
- So top-level object connected to the IBOutlet will be retained once. So I have to release it to dealloc. This is why I must release objects connected to IBOutlet on dealloc method.
- If the object connected another IBOutlet like the IBOutlet, it should be released once more to be dealloc.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论