【问题标题】:Method prototypes in implementation file for pseudo-private methods?伪私有方法的实现文件中的方法原型?
【发布时间】:2011-08-15 19:35:01
【问题描述】:

我有一些方法没有在我的类的接口中声明,因为只有类中的代码才能使用它们。但是当方法想要调用在它们下面实现的方法时,我的方法的排列会产生一些“......可能不会响应选择器......”警告。

有什么方法可以在我的实现文件中声明这些伪私有方法的原型,这样我就不会收到这些警告?

【问题讨论】:

标签: iphone objective-c ios xcode oop


【解决方案1】:

您可以使用class extension。我更喜欢它们而不是类别(为此目的),因为它们声明的方法必须在相应类的主 @implementation 块中实现

一个类通常有一个公开声明的 API,然后有其他方法私下声明,仅供该类或该类所在的框架使用。如上所述,您可以在私有头文件或实现文件中的一个类别(或多个类别)中声明此类方法。这可行,但编译器无法验证所有声明的方法是否都已实现。

类扩展允许您在主类@interface 块内以外的位置为类声明额外的必需方法

你像这样声明一个类扩展:

@interface MyObject () // No name is given in the parentheses

【讨论】:

    【解决方案2】:

    只使用一个类别 - 我在我的 .m 文件中做了这样的事情:

    @interface MyClass (PrivateMethods)
    - (void)privateMethod1;
    - (void)privateMethod2:(NSString *)aParam;
    @end
    
    @implementation MyClass
    - (void)privateMethod1;
    - (void)privateMethod2:(NSString *)aParam;
    @end
    

    【讨论】:

    • 我想不出有什么理由让你通过类扩展来做这件事。
    • 它是相同的东西,但在 .m 文件中定义,因此仅对该文件中定义的其他方法可见。
    • @Chuck - 你可能是对的。我认为我这样做主要是出于习惯,而且我从未发现需要通过扩展获得额外的编译器检查。
    【解决方案3】:

    objective-c 中不存在私有方法。请参阅此帖子。

    Best way to define private methods for a class in Objective-C

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-27
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多