2015-07-20 105 views
-2

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

感谢

+1

[目的-C的可能重复:属性/实例变量在类别](http://stackoverflow.com/questions/8733104/objective-c-property-instance-variable-in-category) – dan

回答

-3

不能属性类别添加。我认为这与处理内存的方式有关。将实例变量添加到已存在的对象将改变对象的大小。

+0

多数民众赞成在不正确的 - 你当然可以添加计算属性和通过leverging运行时甚至存储了属性 –

+0

这是完全正确的,因为他询问属性是否可以添加到一个类别中。他并没有问,属性是否可以(明确地或隐含地)在一个类别中合成。 –

+0

那么你可以添加setter任何getter,但你不能分配内存的权利?除了在方法中... –

-1

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

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

所以无论是已经计算性能,是一种方便的包装“围绕现有功能或使用相关的存储

-1

你可以用相关的对象,这增加变数。虽然这不被推荐。这个链接有你需要知道的一切。

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

科出来的博客:

关联的对象应被视为最后手段的方法,而不是在寻找一个问题的解决方案(真的,类别自己真的不该开始时不在工具链的顶部)。

2

首先我想说Peter Segerblom的回答不正确。但是,Daji-Djan的评论可能是误导性的。

从一开始:

声明的属性是完全的两个声明(一个 - 为只读属性)的方法。期。

  • 这意味着它是一个声明
  • 这意味着它指的是方法

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

但是,如果属性显式或隐式(苹果:自动)合成,它将合成一个伊娃,如果没有。 这个是不可能的,因为它会改变实例对象的内存占用和一个时间点,实例对象已经被分配。

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

  • 已经有伊娃。 (什么使它有点没有意义)
  • 没有综合声明的属性。

然而,这可以是用于计算性质是有用的,对于属性,其值被存储在另一个对象,属性,其值被存储为关联的对象,用于...

+1

谢谢,确实比我的评论好听多了 –