【问题标题】:How to make a forward declaration for private method?如何对私有方法进行前向声明?
【发布时间】:2011-11-11 13:37:52
【问题描述】:

我在实现中使用#pragma 标记将我的方法分组。但有时,方法实现代码出现在调用此方法的代码下方,我收到“找不到实例方法”警告。当我使用私有方法时会发生这种情况。如何解决?

【问题讨论】:

    标签: iphone objective-c forward-declaration


    【解决方案1】:

    最简单的方法是使用匿名类。在.m 文件的顶部,在@implementation 之前添加这样的内容:

    @interface MyClass()
    - (void)myPrivateMethod;
    @end
    

    【讨论】:

      【解决方案2】:

      在您的 Class.m 实现文件中,您可以在开头添加一个接口部分并在其中声明私有函数:

      
      @interface YourClassName (private)
      
      -(void)aPrivateMethod:(NSString*)aParameter;
      ...
      
      @end
      
      @implementation YourClassName
      ...
      @end
      
      

      【讨论】:

        【解决方案3】:

        在这种情况下,您可以在实现文件中使用类扩展来定义这些方法。通过这种方式,您的“公共”API 仍然在您的头文件中定义,您的实现文件包含您的伪私有方法的定义。

        YourClass.m

        @interface MyClass()
        
        - (void)myPrivateMethod;
        
        @end
        
        
        @implementation MyClass
        
        - (void)myPublicMethod
        {
            // This will not throw an error or warning
            [self myPrivateMethod];
        } 
        
        - (void)myPrivateMethod
        {
            // Do something
        }
        
        @end
        

        【讨论】:

        • 使用命名类别的缺点是需要对应的@implementation MyClass(PrivateMethods),否则会收到警告。只需使用匿名类别。
        • 私有类扩展的首选语法是@interface MyClass()
        猜你喜欢
        • 2013-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-17
        • 1970-01-01
        • 2012-01-13
        • 2020-05-12
        相关资源
        最近更新 更多