-1

我的问题很简单。

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

4

2 回答 2

2

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

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

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

将由新实例变量支持的传统属性添加到现有类的唯一方法是使用类扩展,如“<a href="https://developer.apple.com/library/ios/ documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html#//apple_ref/doc/uid/TP40011210-CH6-SW3" rel="nofollow">类扩展扩展了内部实现。”</p>

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

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

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

资源

于 2013-09-12T12:08:54.853 回答
0

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

假设您想扩展 UINavigationController 的某些功能,您可以继承并添加任何您的要求。但 UINavigationController 也是一些 SDK 控件的一部分,例如 UIImagePickerController 和 UITabBarController 中的更多选项卡。您将对该导航控制器做什么,您无权访问它。

有关详细信息,请参阅我的博客文章http://muhammadzahidimran.com/2016/12/09/adding-data-to-sdk-classes-using-categories/

于 2016-12-09T14:37:09.443 回答