私有接口和多个实现

时间:2013-04-18 13:59:43

标签: iphone ios objective-c cocoa-touch cocoa

我从iOS项目中获得了一个简单的Object-C代码片段:

@interface store (private)

@end

@implementation store (private)

@end

@implementation store

我的问题是:

  1. (private)在代码中的含义是什么,私有界面&实施

  2. 最后一行@implementation store是什么意思?空的公共实施?没有@end

  3. 由于上面的代码中有两个@implementation store,这是否意味着objective-c支持单个接口的多个实现?

3 个答案:

答案 0 :(得分:1)

  1. What does (private) mean in the code, private interface & implementation? - (private)表示您正在试用/实施目标-c category。在这种情况下,private只是一个名称。如果它是store (myPrivateMethods)

  2. ,那就无济于事
  3. What does the last line @implementation store mean? An empty public implementation? Without @end? - @implementation store是类store的实际实现部分。不确定如果缺少@end会发生什么。

  4. 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)

  1. 这是objective-c category,允许您将代码添加到现有类中。 parens中的名字是任意的。
  2. 这是一个空的实现,但我很惊讶它没有@end编译。尝试使用默认编译器设置xcode,我收到一个错误。如果仅为了清楚起见,它应该有@end
  3. 第一个实现是第一个的附加组件。您可以使用它将大类分解为单独的模块,使某些界面的部分可供某些人使用而不是其他人使用,或者 - 最有用且最常见的 - 将方法添加到SDK类中。