1

私有方法是一种有用的构造,可以将代码组织在类边界内。一个例子是在自定义 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;
}

我的问题是编译器在调用私有函数的行上生成警告“找不到实例方法'-DoSomethingPrivate'(返回类型默认为'id')”。我从对这个问题的回答中了解到,我可以使用“无名”接口类别来“隐藏”私有方法声明。

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

//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 的示例代码私有方法如何逃避编译器检查,我将不胜感激,这样我就可以避免使用我的所有私有方法维护一个“无名”类别标头。

非常感谢。

4

0 回答 0