我的问题很简单。
在目标C中,我们不能拥有变量的原因是什么?如果我们忽略了诸如关联引用,扩展,动态属性等工作......不允许在类别中使用变量的目标是什么
答案 0 :(得分:2)
如果要将变量添加到现有类,请使用子类化。
如果您想简单地将自己的方法添加到现有类中,请使用类别。
类别可用于声明实例方法或类 方法,但通常不适合声明额外的 属性。在a中包含属性声明是有效的语法 类别界面,但无法声明其他内容 类别中的实例变量。这意味着编译器不会 合成任何实例变量,也不会合成任何属性 存取方法。您可以在中编写自己的访问器方法 类别实现,但你将无法跟踪a 该属性的值,除非它已经由原始存储 类。
添加由新实例支持的传统属性的唯一方法 变量到现有类是使用类扩展,如 在“Class Extensions Extend the Internal Implementation.”中描述
不允许在类别中使用变量的目标是什么?
类别中的方法被添加到运行时的类中,这意味着编译器不会合成任何实例变量,也不会合成任何属性访问器方法。
另一方面,当使用子类时,该类与类扩展同时编译。
答案 1 :(得分:0)
类别提供了向SDK类添加功能的功能。首先,为什么我们需要类别,我们可以扩展一个类来向它添加功能和数据成员。
假设您要扩展UINavigationController的一些功能,您可以子类化并添加您的要求。但是UINavigationController也是一些SDK控件的一部分,例如UITmagePickerController和UITabBarController中的更多选项卡。你要对那个你无法访问它的导航控制器做什么。
有关详细信息http://muhammadzahidimran.com/2016/12/09/adding-data-to-sdk-classes-using-categories/
,请参阅我的博文