2010-09-22 18 views
1

Occationaly Я вижу фрагменты кода создания новых методов для объектов и таким образом, что выглядит следующим образом:Где поставить «лишнюю» реализацию?

@implementation UIImage (Extras) 

- (void)aMethod:(id)anObject { 
    // some functionality 
} 

@end 

Где разместить этот код? Я помещаю его в класс, в котором я сейчас пишу код? Если да, то в какой момент кода мне нужно это поставить?

спасибо.

ответ

3

Вы можете поместить это Категория код где угодно. В общем, этот код должен находиться в файле с именем UIImage + Extras.m и соответствующим заголовочным файлом UIImage + Extras.h.

+0

Спасибо, ребята, просто добавьте его в эти файлы и импортируйте его как обычно? :) просто как тот? блестящий. –

+0

Интересно, стоит ли эта общая идиома. Почему бы просто не поместить свои методы в класс-помощник под названием UIImageExtras с _no category_. Какая категория покупает вас, кроме сохранения импорта вашего вспомогательного класса? Недостаток категории ясен: если ваше добавление является общим именем, вы рискуете столкнуться с будущим изменением класса UIImage или, что более вероятно, с другой подобной категорией, когда вы включаете свою библиотеку (потому что они читают тот же пост на SO). В чем главное преимущество, которое мне не хватает? – Rhubarb

+0

Это элегантный подход. Вы можете вызывать методы непосредственно на объекте. Классы помощников - это не что иное, как контейнеры для статических функций. Они в порядке, но отнимают много очарования от объектно-ориентированного программирования. Мое занятие: если вы работаете * на * объекте, используйте категорию, если вы работаете * с * объектом, используйте вспомогательный класс. И категории очень хорошо работают с подклассами. Что касается коллизий имен, может быть хорошей идеей префикс имен ваших методов. – Eiko

1

Для простоты и сохранить код в чистоте Я обычно ставлю категории класса в отдельных файлах.

Но, как мне кажется, вам просто нужно объявить свою категорию в каком-то заголовке и импортировать ее, чтобы компилятор знал о ваших методах. Реализация этих методов может быть помещена в любой файл (реализация), но я снова думаю, что лучше держать его в отдельном месте.

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