2012-04-18 35 views
3

可能重复:
Difference between Category and Class Extension?objective-c中无名类与普通类之间有什么区别?

我经常被告知,当你想将变量声明为私有,你会做出.m文件一个无名类。

与命名类别相比,无名类中有什么内在不同吗?

有什么区别?

+0

[类别和类扩展之间的区别?](http://stackoverflow.com/questions/3499704/difference-between-category-and-class-extension),可能重复,http://stackoverflow.com/questions/7136124 /,http://stackoverflow.com/questions/1052233/ – 2012-04-18 02:38:28

回答

6

你称之为“无名类”被称为“类延伸”。

一个区别是编译器期望类扩展中的声明在类'@implementation块中定义。也就是说,当它与主要@implementation块位于同一翻译版本中时,您不会明确声明扩展的@implementation块。他们合并为了您的方便。因此,编译器可能会产生警告。

另一个区别是扩展可能会声明合成的属性(并因此调整类型的大小),而常规类别不能。除了属性,实例变量可以在类扩展的@interface中声明。

除此之外,它只是约定。

+3

类扩展也可以声明ivars,而其他类不能。 – 2012-04-18 03:33:42

+0

Oh类扩展可以改变类型的大小。那是一件大事。现在我明白了。 – 2012-04-18 04:10:16

+0

@BJHomer更新。谢谢。 – justin 2012-04-18 04:50:41

相关问题