在类扩展中声明ivar更好吗? 或者它只是开发者的偏好?
答案 0 :(得分:1)
目前,您无法将实例变量添加到类扩展。 swift和Obj-C都是如此。请参阅此问题:Defining a property in iOS class extension。
如果您的意思是,通过在界面扩展名中添加iVar:
@interface MyClass(){
MyIvar *ivar
}
好吧,这是一个选择和方便的问题。通常,您应该将公共接口限制为一组最小的属性/方法,这些属性/方法允许用户以您设计/期望的方式与类进行交互。虽然使用任一方法都可以正常运行代码,但是暴露更多属性/函数会导致更多问题,因为消费类可能会以未计划或意外的方式使用属性/函数。
答案 1 :(得分:1)
顾名思义,它是对类功能的扩展。您可以使用扩展名向类添加额外的行为。添加成员变量或存储的属性有很多问题,即:
当可以在扩展中添加数据成员时,原始类不知道添加的数据成员。这会导致在为这些类创建对象时为这些成员分配的问题。
它还可能会导致数据成员的初始化和取消初始化问题,因为原始的init()或deinit()方法都不知道这些问题。
添加数据成员可能会改变类的行为本质。