Xcode Obj-C专用方法编译器警告

Xcode Obj-C专用方法编译器警告,xcode,methods,private,private-methods,Xcode,Methods,Private,Private Methods,私有方法是保持代码在类边界内组织的有用构造。例如,在自定义UIView子类中组织冗长的Quartz 2d指令。我可以在“.m”文件中包含这些方法,而在“.h”中没有声明。UIView子类“.m”文件的工作示例如下: -(void)DoSomethingPrivate { //Not declared in interface NSLog(@"Does this print a private function?"); } - (id)initWithF

私有方法是保持代码在类边界内组织的有用构造。例如,在自定义UIView子类中组织冗长的Quartz 2d指令。我可以在“.m”文件中包含这些方法,而在“.h”中没有声明。UIView子类“.m”文件的工作示例如下:

-(void)DoSomethingPrivate {                  //Not declared in interface
    NSLog(@"Does this print a private function?");
}

- (id)initWithFrame:(CGRect)frame            //Declared in inherited interface
{
    self = [super initWithFrame:frame];
    if (self) {
        [self DoSomethingPrivate];           //Error: 'Instance method not found'
    }                                        //... but it works anyway.
    return self;
}
我的问题是编译器在调用私有函数的行上生成警告“Instance method'-DoSomethingPrivate'notfound(返回类型默认为'id')”。我从对的响应中了解到,我可以使用“无名称”接口类别来“隐藏”私有方法声明

但是,当我查看Apple示例代码文件“”时,它包含一个私有函数,该函数既没有在无名类别接口中声明,也没有生成编译器警告:

//Private Function
    - (void)drawRadialGradientInSize:(CGSize)size centeredAt:(CGPoint)center { 
        ... 
    }

//Is called by this function...
    - (UIImage *)patternImageOfSize:(CGSize)size {
        ...
              //The next line doesn't generate any warnings!
        [self drawRadialGradientInSize:size centeredAt:center];
        ...
    }
如果有人能解释一下Apple的示例代码私有方法是如何逃过编译器检查的,我将不胜感激,这样我就不必为所有私有方法维护一个“无名”类别标题


非常感谢。

我费了好大劲才找到了自己的答案。。。接口中未声明的私有方法必须位于其在实现中首次使用的物理位置之上,这样编译器才不会抱怨。有人能解决这个问题吗,因为我没有这个特权?Thx.不要为你的类扩展(这是你所谓的“非名称类别”的官方名称)创建单独的标题;将它放在
.m
文件的顶部,导入
#s的下方,以及
@实现之前。更容易维护!:)