Предупреждения компилятора частного метода Obj-C - PullRequest
1 голос
/ 04 августа 2011

Закрытые методы - это полезная конструкция для организации кода внутри границ класса. Примером является организация длинных команд Quartz 2d в пользовательском подклассе UIView. Я могу включить такие методы в файлы .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, чтобы избежать проверок компилятором, поэтому я могу избежать необходимости поддерживать заголовок категории «без имени» со всеми моими закрытыми методами.

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...