我从iOS项目中获得了一个简单的Object-C代码片段:
@interface store (private)
@end
@implementation store (private)
@end
@implementation store
我的问题是:
(private)
在代码中的含义是什么,私有界面&实施
最后一行@implementation store
是什么意思?空的公共实施?没有@end
?
由于上面的代码中有两个@implementation store
,这是否意味着objective-c支持单个接口的多个实现?
答案 0 :(得分:1)
What does (private) mean in the code, private interface & implementation?
- (private)
表示您正在试用/实施目标-c category。在这种情况下,private
只是一个名称。如果它是store (myPrivateMethods)
What does the last line @implementation store mean? An empty public implementation? Without @end?
- @implementation store
是类store
的实际实现部分。不确定如果缺少@end
会发生什么。
Since there are two @implementation store in above code, does that mean objective-c support multiple implementation for a single interface?
- 实际上没有store
的2个实现。类store
有一个实现,该类的类别有一个实现 - store (private)
。
答案 1 :(得分:0)
private
在Objective-C中没有任何意义,如果需要,可以将其称为peanuts
。如果您有多个类别,它实际上是一个区分类别的标签,但它的价值是任意的。作为开发人员,它必须对您有所帮助。
@implementation store
行标记@interface store
定义的类的实现的开始(即没有类别),可能在'.h'文件中声明。事实上,接口位于'.h'中,使其公开(因为其他类可以导入.h
文件,因此可以看到属性,方法等的声明......)。
它不支持多种实现,它们是附加的。当然,那么你有两个实现相同方法的问题。 Apple强烈反对这一点。这是doc。
避免使用类别方法名称冲突
因为在类别中声明的方法被添加到现有类中,所以需要非常小心方法名称。
如果在类别中声明的方法的名称与原始类中的方法相同,或者在同一个类(或甚至是超类)中的另一个类别中的方法相同,则行为未定义为哪个方法实现在运行时使用。如果您使用具有自己类的类别,则不太可能成为问题,但在使用类别向标准Cocoa或Cocoa Touch类添加方法时可能会出现问题。
答案 2 :(得分:0)
@end
编译。尝试使用默认编译器设置xcode,我收到一个错误。如果仅为了清楚起见,它应该有@end
。