【问题标题】:Objective-C method implementation nuancesObjective-C 方法实现的细微差别
【发布时间】:2011-02-23 01:41:17
【问题描述】:

我刚刚开始为 iPhone 开发,并且正在学习 Objective-C。我见过一些代码在类的@implementation 端实现了一个方法,如下所示:

-(void)myMethod; {
  // method body
}

有趣的是,类的@interface 中没有提到myMethod。我尝试了一个示例项目,当我编译时,我从 XCode 收到一条警告,即调用代码可能看不到 myMethod。

谁能告诉我这是怎么回事?

谢谢!

【问题讨论】:

    标签: objective-c xcode methods implementation compiler-warnings


    【解决方案1】:

    这就像 C 中的函数。您不需要声明(即它不必在 @interface 中),但如果没有声明,则任何代码在方法之前定义将生成该警告。代码方法定义之后不会产生警告。

    【讨论】:

      【解决方案2】:

      在 ObjC 中,方法调用是动态解析的 (dynamic binding),这意味着当您执行 [obj myMethod]; 时,ObjC 运行时软件在内部将通过类方法在那个时间点和如果它找到一个名为“myMethod”的方法,它将调用它。

      还可以在运行时向对象添加方法。

      @interface 部分中的方法声明仅用于帮助编译器确定对给定类公开可用的方法。如果您确实只在 @implementation 中添加了一个方法,编译器可能会对此发出警告,但代码仍然可以编译和工作。

      我有时会使用它来为我的对象添加内部方法,这些方法只能从它之后的其他方法调用,而从不从外部调用。虽然我不记得看到过关于它的警告...确保调用代码放置在同一文件中的方法实现之后之后

      【讨论】:

      • 可能是方法名后面的分号引起的警告。在编写单元测试类时,我总是忽略@interface 中的声明,而且我从来没有看到这样的警告。
      • @JeremyP 不,分号是合法的。事实上,从@interface 复制粘贴方法头并返回时,您不必编辑方法头,这非常简洁。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2019-09-30
      • 2012-11-01
      • 1970-01-01
      相关资源
      最近更新 更多