我知道加载NIB时的一些插座连接机制,但我不确定。所以我要问一些问题以确保我的知识。我认为这些都是真的,但是在参考文档中很难找到关于这些的提及。请指出错误和正确的事情。
我有一个这样定义的 IBOutlet:(当然不推荐这样做)
@implementation
{
IBOutlet id var1;
}
@end
- NIB 加载器(分配 | 保留)和自动释放所有顶级对象。因此它将在 runloop 结束时解除分配,而无需额外保留。
- 连接 IBOutlets 是使用 KVC 完成的。
- KVC 主要使用访问器方法。
- KVC 次要使用 setValue:forKey。并且 IBOutlet 将由此方法处理,因为没有声明的属性或访问方法。
- setValue:forKey 保留新的值对象。
- setValue:forKey 释放旧的值对象。
- 所以连接到 IBOutlet 的顶级对象将被保留一次。所以我必须将它释放给dealloc。这就是为什么我必须在 dealloc 方法上释放连接到 IBOutlet 的对象。
- 如果对象连接了另一个像 IBOutlet 一样的 IBOutlet,它应该再次被释放以被释放。