Pull to refresh

Comments 21

Спасибо за статью, очень полезная информация.
Да, после C# или Python конечно лямбды выглядят сильно мудреными. Если в C# для функции обратного вызова я буду писать лямбду, то в Objective-C я пока лучше по старинке с селектором, чтобы не мудрить с памятью. Хотя может дело привычки.

В любом случае хотя бы map в массиве уже отличный плюс. Джавистам о таком только мечтать)
Исправьте слово «Сожержание» в начале статьи
Поправил, спасибо
</source lang="cpp"><//source> попробуйте, хотя не уверен что будет выглядеть лучше.
Чего-то я не очень понял преимущество блоков, ибо первый же пример не рабочий…

NSArray* stringsLengths( NSArray* strings_ )
{
 return [ strings_ map: ^( id string_ )
 {
  return (id)[ NSNumber numberWithUnsignedInt: [ string_ length ] ];
 } ];
}


* This source code was highlighted with Source Code Highlighter.

warning: 'NSArray' may not respond to '-map:'

я кажется понял — вы рекомендуете подключить внешнюю библиотеку, чтобы код работал. Ну тогда очевидно что сравнение не корректно, ибо решение 1 не использузет никаких внешних библиотек, а решение 2 использует. Сделать решение 1 более «элегантно» но чтобы оно использовало внешнюю библиотеку (без блоков) вполне себе возмоножно.
Т.е. аргумент
Но использование блоков имеет не мало преимуществ, и первое из них — существенная экономия на количестве кода,
не состоятелен (код был вынесен во внешнюю библиотеку). Впрочем продолжение
а следовательно и на времени написания и поддержке.
Очень сомнительно — ибо лучше 10 строк чистого для понимания кода против одной строчки в которой черт ногу сломит…
Топик плюсанул ибо он наконец мне помог понять мне что блоки мне совсем не нужны.
Поддерживаю жуткую нечитаемость кода. Хотя, возможно, это дело привычки.
аргумент: «существенная экономия на количестве кода» — не состоятелен (код был вынесен во внешнюю библиотеку).

Метод map: пишется один раз, использовать можно множество раз, тут и экономия. В моем проекте map: встречается 44 раза
Очень сомнительно — ибо лучше 10 строк чистого для понимания кода против одной строчки в которой черт ногу сломит…

Имя метода map: выбрано не случайно, метод map: с аналогичным поведением встечается фактически во всех языках программирования и многим, включая меня проще читать map: вместо 10 строчек кода.
Топик плюсанул ибо он наконец мне помог понять мне что блоки мне совсем не нужны.

Полагаю что с блоками придется ознакомится всем IOS разработчикам ибо многое новое апи IOS SDK идет c использованием блоков, без альтернативы с селекторами. Пример
> Метод map: пишется один раз
Ну так и без блоков этот метод написать один раз легко — что мешает использовать не блок а указатель на функцию коли хочется параметром код передавать?

одно дело использовать по необходимости когда альтернатив нет, другое дело сознательно. Я тоже как ни странно делал код с блоками — надо было проверить не расширит ли возможности такой вариант работы с акселерометром. Не расширил. А вот код стал более громоздким — это точно. Хотя конечно — на вкус и цвет все фломастеры разные :)
Топик плюсанул ибо он наконец мне помог понять мне что блоки мне совсем не нужны.

Вам следует срочно прочитать уже успевшие стать «старой классикой» мануалы «Grand Central Dispatch (GCD) Reference» и «Concurrency Programming Guide». А то вдруг где в разговоре всплывает, как сейчас — люди не поймут же. Это по сути сейчас основы и писать код без использования подобных бустов — это, простите, но писать говнокод.
не прощу. Мануалы, что вы порекомендовали — относятся к iOS4 и выше — т.е. весь код что написан до iOS 4 — говнокод? ну-ну.
Лично мне было очень трудно без блоков в IOS ver. < 4.0, потому написал даже рантайм
Нет конечно, уверен что хороший код, но продолжать отказываться от них сейчас — это действительно неблагоразумно.

Кстати на самом деле блоки в мак тусовке активно муссировались задолго до официального выхода (10.6 и iOS 4), Apple сама их начала пытаться продвинуть как стандарт еще в 2008 году, а поскольку все сурсы открыты, то почти сразу же был отпочкован проект plblocks который позволял насладится ими и в леопарде, ну и в первых версиях iOS (не уверен, ибо не пишу под iOS, но вроде как еще с 2 версии).

Ну а после уже официального представления прошел же целый год, за это время блоки и gcd действительно стали неотъемлемой частью практически любой программы. Если спросить меня что самое запоминающееся появилось у Apple за последние несколько лет, я назову именно gcd и блоки.
Немного с вами не согласен. Блоки, возможно, и не панацея, однако при работе с теми же интерфейсами зачастую просто не нравится определять половину логики в одном методе, половину в другом.
Я имею ввиду, например, UIAlertView — ради зачастую пары строк, обрабатывающих действия по выбору пользователя, приходилось заводить новый метод + еще и определять, от какого из UIAlertView (если их несколько) мы пришли…
хотелось бы еще добавить, что при объявлении и реализации блока очень помогает набрать inlineBlock и получить такой хинт:
<#Return Type#>(^<#Block Name#>)(<#Parameter Types#>) = ^(<#Parameters#>) {
<#Code#>
};
Насчет блоков для UIAlertView есть хорошая надстройка от Mugunth Kumar — MKBlockAdditions
Еще бы, не один же я блоки люблю использовать :).
Sign up to leave a comment.

Articles

Change theme settings