Новые плюшки в Xcode и Objective-C

    Совсем недавно завершилась очередная WWDC, что является важным и заметным событиям для всех, кто работает с продукцией Apple, кто пишет для OS X и iOS, для Safari и так далее. Мне бы хотелось поделиться понравившимися мне новинками в IDE Xcode и в языке Objective-C.

    Начну с языка. Итак у нас появились новые абстракции — литералы (Literals) которые позволяют гораздо легче и удобнее описывать такие типы данных как числа, словари (dictionary) и массивы (array).
    Сравним:
    NSNumber *myNum = [NSNumber numberWithInt:12];
    NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:@"one", @"first", @"two", @"second", nil];
    NSArray *myArr = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
    


    И в новом варианте:
    NSNumber *myNum = @12; // or
    NSNumber * myNum = @(8+4);
    NSDictionary *myDict = @{@"first" : @"one", @"second" : @"two"}; // Key:value without nil!
    NSArray *myArr = @[@"one", @"two", @"three"];
    


    Как подсказал мне 1101_debian теперь и обращаться к элементам массива или словаря можно гораздо удобнее:

    myArr[0]
    myArr[5]
    myDict[@"Fuu"]
    


    По моему — намного удобнее и нагляднее. Мне чем-то напомнило Perl, который для меня является эталоном грамотной организации языка, лаконичный и удобный. И еще одно маленькое изменение, теперь при наборе NSS подсказка предложит NSString в первую очередь, точнее первым будет предложен вариант, который чаще используется. Я понимаю, почему это вызвало аплодисменты на презентации.
    Далее — объявление свойств в классе. Теперь не надо задавать @synthetize, он будет задан по умолчанию. То есть достаточно просто объявить свойство в интерфейсе.
    @property(copy) NSString *myString;


    Очень много нового добавили в поиск. Возможность поиска по регулярному выражению или по составлению правил (и, или, не...), поиск и замена только в выделенном фрагменте и многое другое. Надо пробовать все это ручками.
    Очень много изменений произошло в визуальном редакторе интерфейса (interface builder). Теперь вся работа с расположением, размерами элементов, правилами их масштабирования и выравнивания при изменении ориентации выполняется намного проще и нагляднее. Хотя, конечно, надо бы привыкнуть.
    Так же более информативными стали сообщения об ошибках и предупреждения. Теперь они показывают на конкретное место в строке, где есть проблема. Ну и до кучи, при автозавершении кода тоже есть контекстная помощь, пока не знаю так ли это нужно.
    Добавили автоматическую чистку пробелов к конце строк, так же улучшили анилизатор кода, который и раньше помогла избавиться от массы возможных memory leaks, особенно в больших проектов писанных «всеми и никем».
    В систему управления версиями добавили возможность исключать выделенный фрагмент из текущего коммита. По мне — очень удобная функция при разумном использовании.
    В перспективе (в следующем году) обещается полный отказ от устаревших компилятора (LLVM-GCC) и отладчика (GDB). Я не пользуюcь ими в своей работе, так что мне сложно судить, насколько это будет во благо. Для развития Xcode и Objective-C — безусловно это плюс, не надо тащить дальше с собой совместимость.
    В общем изменений много, большинство полезные и ожидаемые, осталось дождаться релиза нового Xcode что бы начать со всем этим работать.
    Вполне возможно, что я что-то упустил, так что буду рад вашим комментариям.

    По материалам WWDC 2012.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 41

      +3
      Обзор на аглицком.
      На мой взгляд вы пропустили не менее приятную вещь: доступ к объектам массива/словаря по []:
      arr[0]
      arr[5]
      dict[@"Fuu"] 
      // и т.п.
      

      И самое приятное в самом Xcode — это «умный» автокомплит, который предлагает сначала наиболее используемые слова, а не NSStream вместо NSString =)
        0
        О! Спасибо! Действительно пропустил. Более того, я это в материалах при просмотре пропустил. И да, про «умный» автокомплит, согласен, поправлю.
          +1
          Это в какой версии xCode? мой все еще NSStream предлагает
            +2
            Xcode 4.5DP1
              0
              Спасибо) ждем релиз тогда)
                0
                Уже DP2, который, вопреки release notes, работает под Lion.
                  0
                  Ну у меня все еще DP1 стоит, значит нужно обновиться.
                    +1
                    не нужно — в DP2 что-то мощно сломали в области iOS SDK — часть приложений крешается после компиляции на взлете.
                      0
                      Большое спасибо!
              0
              Единственное, что этот умный автокомплит пока подтормаживает ощутимо по сравнению с 4.3. Надеюсь в будущем «ускорят».
                0
                Думаю это из-за «inline-доков», но все же это быстрее чем листать до NSString =)
                +1
                Кстати, такой способ доступа к элементам (через квадратные скобки) можно использовать и для своих классов.
                Для этого нужно реализовать методы -objectAtIndexedSubscript: и -setObject:AtIndexedSubscript: для числовых индексов, -objectForKeyedSubscript: и -setObject:forKeyedSubscript: — для индексов-объектов (см. лекцию Modern Objective-C, 28 мин). Поддержка этого, опять таки, на уровне компилятора, т. е. это должно работать и для старых версий ОС.
                0
                В перспективе обещается отказ от поддержки C++ и, как следствие, избавление от его компилятора и отладчика.


                Откуда взялась эта клевета? Apple создали собственную libc++ и поддерживают уже практически весь С++11.

                Указывайте источники, пожалуйста, иначе грош цена такой информации.
                  –1
                  Указываю. Видео с WWDC 2012, Developer Tools Kickoff (400), примерно с 44-й минуты.
                  Возможно я несколько неверно изложил, но слово клевета — явно слишком сильное, не находите?
                    0
                    Ну учитывая что модули ядра (kext'ы) разрабатываются на C++ (хоть и Embedded и урезанном), то новость об отказе от плюсов выглядит как-то странно, что ли.
                      +2
                      Только что посмотрел это видео. Речь идет о компиляторе. Они вовсю работают над новым компилятором LLVM и дебагером LLDB, которые уже давно стали дефолтными. Что-то вроде дословного перевода на 45 минуте звучит так «В то время как Xcode 4.4 и 4.5 все еще поддерживают устаревшие LLVM-GCC и DBG, на данный момент они официально не поддерживаются (deprecated) и в следующем году их не будет вообще.»

                      Вот и все, новый LLVM компилятор точно так же поддерживает C++, как и старый, по крайней мере нигде не утверждается обратное. То что пропало «GCC» в названии, никак не означает отказ от С++, имхо. Так что ваше заявление реально слишком сильное, «несколько неверно изложил» — это слабо сказано :)

                      Я уже испугался, как же boost со всеми его плюсами.
                      Думаю подправить нужно статью.
                        0
                        Походу напутал с версиями XCode в коменте, но суть, думаю, понятна.
                          +1
                          Да, спасибо. Поправлю с статье :) Коллективный разум рулит!
                            0
                            фраза «полный отказ от устаревших компилятора (LLVM-GCC)» в нынешней версии статьи объявляет LLVM устаревшим, что сильно удивляет. Может, написать не про отказ от устаревших, а про обновление используемых?
                    0
                    Вроде обещали что и в 4.4, которая с Mountain Lion выйдет уже будут все эти новшества.
                      0
                      Вроде нет в нет.
                      0
                      Исправьте название IDE на Xcode. 1101_debian его правильно пишет, а Вы — нет.
                        +1
                        Исправил.
                        0
                        Ох! Да это просто праздник какой-то! Новые литералы — это жесть!
                        А за автодополнение NSString отдельное спасибо!
                          0
                          Уже известна минимальная версия runtime для OSX/iOS для которой ЭТО будет работать? А то окажется что только для OSX 10.8 / iOS 6 :(
                            0
                            Насколько я понял из видео, должно начать работать уже c выходом Горного Льва.
                              0
                              Да, да, вот и наступил момент когда мой MacBook 2008 года устарел. Mountain Leon на него официально не установится. С другой стороны — железный повод для апгрейда, ведь для работы нужно.
                                0
                                Я вот тоже думаю о новом MacBook Pro Retina, потому что на чем же смотреть в полном разрешении эмулятор нового iPad? Остается жену в этом убедить ;)
                                  +1
                                  Везет вам. Вы не испытываете боль в энном месте, когда работаете на 15" мониторе…
                                0
                                Если вы про литералы, то в видео «Modern Objective-C» говорилось что будет работать на всех версиях iOS. Про OS X не помню, вроде тоже на всех. Типа это компилятор все делает. Нужен только Xcode свежий.
                                  0
                                  Именно так.
                                    0
                                    Ну да, это просто синтаксический сахар, очень сладкий сахар.
                                    0
                                    Рботать будет везде, т.к. при компиляции это все оборачивается в обычные [… array/dictionaryWith...].
                                    –2
                                    На самом деле, рад небольшому количеству привнесенного синтаксического сахара, надеюсь не превратится в доселе известный мне C# к котором шла прямо-таки гонка за языком, что требовалось для чтения чужого кода, нежели от работы на самим приложением.
                                      0
                                      Интересно пофиксили ли они эту багу:
                                      Couldn't register com.yourcompany.XXX with the bootstrap server. Error: unknown error code.
                                        0
                                        Это врядли. Баги в области подписки и сертификатов — это святое. :(
                                        0
                                        Objective-C стал ещё чуточку ближе к прародителю — Smalltalk.
                                        Сравните:

                                        NSArray *myArr = @[@«one», @«two», @«three»];

                                        и

                                        array := #(#one #two #three).
                                          0
                                          Насчет автоматически синтезируемых @property. Для каждого свойтсва name будет автоматически создана Ivar "_name", при этом Apple наконец сказали, что отказываются от слов, что _ в начале имени переменной зарезервировано ими. При этом они все равно говорят, что в начале имени метода импользовать симвло _ не рекомендуется.
                                          • UFO just landed and posted this here
                                              0
                                              А я бы хотел регулярные выражения из Perl :)
                                                0
                                                Мдя… в App Store с DP не пускают. 4.3 на Lion, 4.4 на Caugar.

                                                Only users with full accounts can post comments. Log in, please.