不久前,我成了通过代码创建/操作视图层次结构的粉丝。两者都是因为我认为更具表现力,迫使我更多地了解Cocoa。
但是我只写了5行代码,如果使用了IBOulet
,它会更具表现力。它在具有特定标记的视图中查找子视图并向其发送消息。但我可以轻松创建IBOutlet
并仅在一行中完成。
因此,我问:创建IBOutlet
太贵了吗?
P.S。:让我们切断对性能的可读性"目前。我真的想知道这个的影响。
答案 0 :(得分:4)
IBOutlet
是Xcode的标记,在预处理步骤结束时会被删除。在内部,设置它归结为指定一个指向“后退”IBOutlet
属性的实例变量的单个指针。此指针在视图设置时分配,并且在此之后不会更改。这很便宜。
另一方面,通过标记查找子视图是每次查找子视图时都需要运行的运行时操作。通常它很便宜,但是在具有大量子视图的视图中它也可能变得相当昂贵。
因此,我肯定会选择IBOutlet
,因为这是一次性交易,因为它可以让您将代码从五行缩短为一行。
答案 1 :(得分:3)
您必须能够找出当前方法的优缺点。事实上,Apple的文档指出:
与任何对象状态项一样,你应该能够证明它包含在一个类中;对象拥有的出口越多,占用的内存就越多。如果有其他方法可以获取对象的引用,例如通过矩阵中的索引位置查找它,或者通过包含它作为函数参数,或者通过使用标记(指定的数字标识符),您应该这样做相反。
我更喜欢在大多数情况下使用IBOutlets
,因为(我知道你不想听到这个)它们使代码更具可读性,当然@dasblinkenlight指出,你遍历视图层次结构在运行时执行,因此可以随时(假设您在viewDidLoad中执行此操作)加载视图。
我的建议:坚持IBOutlets
,除非你有一个非常简单的视图层次结构,并且使用标签来查找子视图是最好的解决方案。