Pull to refresh

Comments 20

Где же ссылка на GIT? Охота переписать это дело на ARC. Код годный, хотя у ребят, которые пришли в айфон не из C# может вызвать панику и бугурт — айфонщики очень любят средства из коробки. И на то есть причина — в основном, реализации всяких там DAO, и других паттернов мудрых выглядят на Objective-C убого, ведь он как Ruby — чем проще, тем лучше. Друго дело, если таким велосипедом решается проблема синхронизации.
Я гитом не пользуюсь, потому что не свезло — мы на работе пользуемся TFS и SVN.

Если вам интересно — можете опубликовать на своем, я добавлю ссылку в топик. Лицензии нет, так что можно считать, что это выкладывается под BSD.
Я вот не совсем понял вот это «Событийно-ориентированная логика в Objective C держится на трех китах — протоколы, notification center и key-value observing», а точнее при чем тут протоколы? Ну и причины побудившее Вас к написанию «велосипеда» тоже описаны расплывчато и опять при чем тут протоколы и, раз уж они Вам не нравятся, то где в статье другие методы расширения классов?
На базе протоколов тоже замечательно реализуется событийно-ориентированная логика.

А причины мутные именно в силу того, что тут вопрос вовсе не в том, что так надо или не надо, а в том, как привычнее. Мне привычен и удобен данный подход, хотя в зависимости от места я использую и подписание через KVO, и нотификации, и проброс событий с помощью протоколов.
Спасибо за свежий взгляд со стороны! Но стандартные notifications вы явно недооценили. Стек они вовсе не разрывают, если конечно вы не посылаете их асинхронно. И отрабатывают они в том же потоке, из которого они были посланы, а не обязательно в main thread.
Критиковать не сложно, попробую вас поддержать! Что мне не нравится в стандартных notifications, так это объемный синтаксис и то, как передаются параметры. Вот если бы посылать сообщение с произвольным числом типизированных параметров, и через message forwarding пересылать подписчикам — может получиться что-то интересное…
В моем подходе произвольное число типизированных параметров пересылается через наследники класса AWEventArgs, которые по необходимости определяются для каждого события.

Хотелось унифицировать интерфейс, не потеряв гибкости.
Событийно-ориентированная логика в Objective C держится на трех китах — протоколы, notification center и key-value observing.


А как же блоки? и не протоколы, раз уж на то пошло, а делегирование.
Блоки — это техническая вещь, представляющая собой фактически анонимный метод, я не думаю, что следует обращать особое внимание на это.
Блоки — это техническая вещь, представляющая собой фактически анонимный метод

Это не так, и именно в этом и заключаются мощные возможности блоков для обработки событий
Блоки являются замыканиями, поэтому позволяют обрабатывать события в стиле javascript:
SomeClass *someObject = self.someObject;

[object on:@"EventName" do:^(Event *event) {
    [someObject doSomething];
}];
Да, можно и так.

Кстати, мой код несложно расширить для того, чтобы он брал блоки в качестве обработчиков события. Он даже проще станет.
Кроме очень мутной задачи, которую Вы решали (догадываюсь, что Вам бы помог NSNotificationQueue, который отлично описан в документации) мне не нравится использование названия delegate. Вы что-то кому-то делегируете? Нет. Очень часто вижу в коде разных исходников delegate к месту и не к месту.
В .NET для указателей на методы класса используется понятие «делегат», который фактически представляет собой пару target+method то есть является фактически полноценным method as the first class object.

Проблемы с терминологией решаются автозаменой.
И вообще часто сталкиваюсь с тем, что кто-то пришел с другого языка и тянет за собой все с формулировкой «Я так привык». Может лучше привыкнуть/переучиться на стандартные методы для платформы? Ну сделали вы велосипед, а как теперь его использовать для системных классов? Будем где использовать NSNotificationCenter, а где-то Ваш код? А третий человек придет из языка _новый_язык_ и тоже добавит в этот же проект еще одну систему, так как он к ней «привык»?
Может быть, имеет смысл переучиться на другую технику. А может быть и нет — здесь непонятно, как правильно.

Я в C# добавляю монады, например. Я вообще стараюсь тянуть из разных языков наиболее удобные подходы, чтобы сделать свою жизнь проще.
Вместо велосипеда с NSArray для групировки объекта, селектора и аргументов лучше использовать NSInvocation и пересылать в нужный runLoop вызов invoke.
блин, как это всё сложно для новичка — просто капец
Sign up to leave a comment.

Articles