我一直在查看 Apple 提供的示例代码,偶然发现了一些我没有了解的有趣的东西。在.m
文件的子类中,有多个用@implementation
. 最后一个是@implementation
我所期望的通常的 - 所有代码所在的类实现,但上面是几个简短的实现,每个实现都定义了一个方法。它们以这种格式声明:@implementation ClassName (Convenience)
. 其中定义的方法与其他方法的格式相同,但它们以 . 为前缀aapl_
。当然,在每个@implementation
定义之后@end,
。调用这些方法的方式是创建一个实例ClassName
然后调用该方法,就像使用标准 API 一样:[anInstance aapl_thisInterestingMethod:aParameter];
所以这似乎是一种在不创建类别的情况下向类添加方法的方法,您使用类的实例调用它,并且它仅特定于该文件。您可以使用self
来引用调用参数。
我的问题是:
- 还有比这更多的吗?
- 为什么要在末尾附加(便利)?
- 添加前缀是否
aapl_
只是为了表明这不是标准 API 的一部分,而是我们自己的方法? - 为什么这比像通常那样定义一个方法,在调用参数中接受作为常规参数更好?例如:
[self anInterestingMethod:myInstance withParameter:aParameter];
- 这些类型的方法/实现叫什么,我还应该知道什么?
编辑:这个问题与被标记为重复的问题完全没有关系... @interface is not @implementation