objective-c中无名类别和普通类别之间有什么区别?

时间:2012-04-18 02:28:33

标签: objective-c xcode4.2

  

可能重复:
  Difference between Category and Class Extension?

我经常被告知,当您想要将变量声明为私有时,您将在.m文件中创建一个无名的类别。

无名类别与命名类别相比有什么本质上的不同吗?

有什么区别?

1 个答案:

答案 0 :(得分:6)

您所谓的“无名类别”称为“类别扩展”。

一个区别是编译器期望类扩展中的声明在类“@implementation块中定义。也就是说,当它与主@implementation块处于相同的转换时,您不会明确声明扩展名的@implementation块。为方便起见,它们合并在一起。因此,编译器可能会产生警告。

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

除此之外,这只是惯例。