Каков стандартный способ расширения и расширения поведения init в Objective-C?

Категории используются в Objective-C. для реализации расширений существующих классов.

Это отлично подходит для предоставления новых методов, которые можно было бы использовать, но не обязательно помогает улучшить поведение существующих методов класса.

В частности, я заинтересован в расширении методов init и их настройке таким образом, чтобы необходимые настройки для моей категории выполнялись во время инициализации объекта. Если вы хотите знать, это сигналы ReactiveCocoa, которые я хотел бы настроить один раз за время существования объекта. В идеале это должно идти в init.

Очевидный способ сделать это — вызвать метод setUpXYZExtension, определенный в категории, непосредственно из init. Однако это означает, что основной исходный файл теперь знает расширение. т. е. удаление исходного файла расширения приведет к ошибке компиляции, поскольку метод setUpXYZExtension не будет найден.

Есть ли потенциально более аккуратный способ сделать это, например, чтобы при удалении исходного файла категории не было ошибки компиляции?


person fatuhoku    schedule 19.05.2014    source источник
comment
Пока это всего лишь одноэлементные объекты, вы всегда можете dispatch_once() оживить их в +load или +initialize, если вы знаете, что сам объект также не реализует эти методы.   -  person CodaFi    schedule 20.05.2014


Ответы (1)


Не уверен, что это стандарт, но вы можете посмотреть на метод swizzling. Swizzling позволяет либо расширить, либо заменить реализацию методов текущих классов.

http://nshipster.com/method-swizzling/

person lucianomarisi    schedule 19.05.2014