【发布时间】:2015-04-07 15:22:11
【问题描述】:
在类扩展中声明 ivar 更好吗? 还是只是开发者的偏好?
【问题讨论】:
-
你试过了吗?有用吗?
标签: ios
在类扩展中声明 ivar 更好吗? 还是只是开发者的偏好?
【问题讨论】:
标签: ios
顾名思义,它是类功能的扩展。您可以使用扩展为类添加额外的行为。添加成员变量或存储属性有很多问题,即:
当可以在扩展中添加数据成员时,原始类不知道添加的数据成员。这会导致在为此类创建对象时分配此类成员的问题。
它还可能导致数据成员的初始化和反初始化问题,因为原始 init() 或 deinit() 方法不知道这些问题。
添加数据成员可能会在行为方面改变类的本质。
【讨论】:
目前您无法将实例变量添加到类扩展中。这对于 swift 和 Obj-C 都是如此。看到这个问题:Defining a property in iOS class extension。
如果您的意思是,通过向接口扩展添加 iVar:
@interface MyClass(){
MyIvar *ivar
}
嗯,这有点选择和方便的问题。一般来说,您应该将您的公共接口限制为一组最小的属性/方法,这些属性/方法允许用户以您设计/期望的方式与类进行交互。虽然您的代码使用任何一种方法都可以正常工作,但公开更多属性/函数可能会导致更多问题,因为使用类可能会以计划外或意外的方式使用属性/函数。
【讨论】: