2012-03-05 2 views
1

Я совершенно новое в Objective-C, и я вопрос:Назначение категорий Obj-c в конкретной ситуации.

Я через образец кода какого-нибудь компании Apple и обнаружил следующее:

https://developer.apple.com/library/ios/#samplecode/GLSprite/Listings/Classes_EAGLView_m.html#//apple_ref/doc/uid/DTS40007325-Classes_EAGLView_m-DontLinkElementID_4

В верхней части файл, я нашел в использовании категорий Objective-C

@interface EAGLView (EAGLViewPrivate) 

- (BOOL)createFramebuffer; 
- (void)destroyFramebuffer; 

@end 


@interface EAGLView (EAGLViewSprite) 

- (void)setupView; 

@end 

Сразу после этого, начинает реализацию класса EAGLView.

Какова настоящая цель категорий здесь, так как 3 функции, описанные выше, также могут быть определены непосредственно в файле заголовка?

Thx

ответ

6

Как указано имя первой категории (в «EAGLViewPrivate») объявляя эти методы в файле .m является способ моделирования частных методов. Objective-C не имеет истинной поддержки частных методов, но поскольку они не объявлены в файле .h, компилятор будет предупреждать, когда код за пределами файла .m, где они объявлены, пытается их вызвать.

В наши дни это чаще всего применяется с расширениями классов (особый случай категории), главным образом потому, что использование расширения класса приводит к предупреждению компилятора, если «частный» метод не реализован в блоке @implementation класса , Расширения классов были новой функцией Objective-C 2.0, поэтому в более старом коде вы часто видите категорию с приватным именем, как в коде, который вы опубликовали. Цель та же.

+0

Thx для четкого ответа. Но знаете ли вы, почему, 2 разных категории вместо 1? –

+0

Я не уверен, какой был автор этого намерения кодов. Скорее всего, это всего лишь способ организации методов по их функции, чтобы сделать код немного читабельнее. В тех случаях, когда у вас есть множество частных методов, разделение групп связанных методов может сделать чтение кода, а также рефакторинг проще. Тем не менее, я просто использую комментарии и '#pragma mark', чтобы сделать это сам. –

+0

Хорошо, ваше время. –

Смежные вопросы