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