在Objective C类别中添加属性

时间:2015-07-20 15:01:20

标签: ios objective-c categories objective-c-category

我想询问是否建议将类别中的属性添加到目标C类。如果可以共享某些官方苹果链接,那么它会很棒。

由于

4 个答案:

答案 0 :(得分:2)

首先,我想说Peter Segerblom的答案是不正确的。但也许Daji-Djan的评论会产生误导。

从一开始:

声明属性仅仅是两个(一个 - 用于只读属性)方法的声明。期。

  • 这意味着它是声明
  • 这意味着它引用了方法

因此,您可以在类别中添加声明属性。

但是如果属性是明确地或隐含地(Apple:自动地)合成的话,它将合成一个ivar,如果没有的话。 这个是不可能的,因为它会改变实例对象的内存占用时间,并且已经分配了实例对象。

所以你必须做以下事情之一:

  • 已经有了一个伊娃。 (是什么让它变得毫无意义。)
  • 没有声明属性的合成。

但是,对于计算属性,对于其值存储在另一个对象中的属性,对于其值存储为关联对象的属性,这可用于...

答案 1 :(得分:0)

您可以使用关联对象执行此操作。虽然不建议这样做。此链接包含您需要了解的所有内容。

http://nshipster.com/associated-objects/

博客中的部分:

  

关联对象应被视为一种最后的方法,而不是寻找问题的解决方案(实际上,类别本身不应该在工具链的顶部开始)。

答案 2 :(得分:-1)

你可以很容易地做到这一点 - 如果苹果这样做,我不知道。他们经常在类别中公开属性..

无论如何,如果你的设计有意义,请继续!请记住,虽然您可以添加属性,但无法将变量添加到现有类中。

所以要么具有计算属性,要么是一种“便利包装器”'围绕现有功能或使用关联存储添加变量

答案 3 :(得分:-3)

您无法向类别添加属性。我认为这与处理内存的方式有关。将实例变量添加到现有对象将改变对象的大小。