我经常被告知,当您想要将变量声明为私有时,您将在.m文件中创建一个无名的类别。
无名类别与命名类别相比有什么本质上的不同吗?
有什么区别?
答案 0 :(得分:6)
您所谓的“无名类别”称为“类别扩展”。
一个区别是编译器期望类扩展中的声明在类“@implementation
块中定义。也就是说,当它与主@implementation
块处于相同的转换时,您不会明确声明扩展名的@implementation
块。为方便起见,它们合并在一起。因此,编译器可能会产生警告。
另一个区别是扩展可以声明合成的属性(并因此调整类型的大小),而常规类别则不能。除了属性之外,实例变量可以在类扩展名@interface
中声明。
除此之外,这只是惯例。