分类&变量

时间:2013-09-12 11:28:02

标签: objective-c categories

我的问题很简单。

在目标C中,我们不能拥有变量的原因是什么?如果我们忽略了诸如关联引用,扩展,动态属性等工作......不允许在类别中使用变量的目标是什么

2 个答案:

答案 0 :(得分:2)

如果要将变量添加到现有类,请使用子类化

如果您想简单地将自己的方法添加到现有类中,请使用类别

  

类别可用于声明实例方法或类   方法,但通常不适合声明额外的   属性。在a中包含属性声明是有效的语法   类别界面,但无法声明其他内容   类别中的实例变量。这意味着编译器不会   合成任何实例变量,也不会合成任何属性   存取方法。您可以在中编写自己的访问器方法   类别实现,但你将无法跟踪a   该属性的值,除非它已经由原始存储   类。

     

添加由新实例支持的传统属性的唯一方法   变量到现有类是使用类扩展,如   在“Class Extensions Extend the Internal Implementation.”中描述

不允许在类别中使用变量的目标是什么?

类别中的方法被添加到运行时的类中,这意味着编译器不会合成任何实例变量,也不会合成任何属性访问器方法。

另一方面,当使用子类时,该类与类扩展同时编译。

source

答案 1 :(得分:0)

类别提供了向SDK类添加功能的功能。首先,为什么我们需要类别,我们可以扩展一个类来向它添加功能和数据成员。

假设您要扩展UINavigationController的一些功能,您可以子类化并添加您的要求。但是UINavigationController也是一些SDK控件的一部分,例如UITmagePickerController和UITabBarController中的更多选项卡。你要对那个你无法访问它的导航控制器做什么。

有关详细信息http://muhammadzahidimran.com/2016/12/09/adding-data-to-sdk-classes-using-categories/

,请参阅我的博文