При разработке софта под iPhone, столкнулся с проблемой непонимания механизма распределения памяти. Являясь java-разработчиком, привыкшим к чудесам Garbage Collector'а, тема памяти в Objective C поначалу доставляла мне массу неприятностей. Спустя некоторое время, написав свое первое приложение, я подумал, что полностью разобрался в этой непростой теме... и это было моей ошибкой. Все таки, сначала надо хорошо читать мануалы и желательно до конца :)
Назвал я данную тему непростой не из-за сложности механизмов управления памятью - они то как раз более-менее понятные и простые, а, скорее, из-за того, что не разобравшись до конца, как правильно "освободить" объект из памяти, можно получить массу сложноотлавливаемых ошибок типа EXC_BAD_ACCESS, причем необязательно именно в том месте, где была допущена ошибка распределения памяти.
Длительное ожидание закончилось, и несколько часов назад компания Apple официально анонсировала свой планшетный компьютер, который получил звучное имя iPad. Презентовал новинку глава Apple, Стив Джобс (Steve Jobs).
Итак, Apple iPad оснащается 9,7-дюймовым глянцевым емкостным IPS-дисплеем с LED-подсветкой и поддержкой технологии мультитач, разрешение экрана — 1024х768 точек. Процессор Apple A4 имеет тактовую частоту 1 ГГц, объем SSD-накопителя — 16 Гб, 32 Гб или 64 Гб. Имеется поддержка Wi-Fi 802.11 a/b/g/n, Bluetooth 2.1 с EDR, также планшет оснащён акселерометром, компасом, aGPS-модулем, датчиком освещённости, динамиком и микрофоном. Габариты планшета — 243х190 мм, толщина — всего 13,4 мм, а вес — 680 граммов у модели без 3G-модуля и 730 граммов — с 3G.
Если вы хоть раз занимались разработкой программного обеспечения под iPhone, то наверняка встречались с ошибкой EXC_BAD_ACCESS. Отловить ее достаточно непросто, т.к. встроенный дебагер не покажет вам нужный стектрейс и тем более не подскажет, как все исправить.
Что же такое EXC_BAD_ACCESS? Мне удобнее сравнивать эту ошибку с NullPointerException в Java, т.к. возникает она в ситуации, когда вы отправляете "сообщение" объекту, который уже был выгружен из памяти (released). Например, попробуйте создать объект с помощью alloc и затем два раза подряд его "отпустить" с помощью release.
Так как же быть, если у нас достаточно большой проект с массой кода и объектов? Как проще и быстрее отловить данную ошибку? На помощь придет директива NSZombiEnabled, установленная в переменных окружения проекта. Все, что она сделает - это заставит Objective C runtime оставлять объект-пустышку за каждым выгруженным реальным объектом и в следующий раз, когда вы попытаетесь обратиться к своему выгруженному объекту, вызов пойдет именно к пустышке, которая остановит выполнение кода и выведет короткое и ясное сообщение в дебагер о том, какой объект был вызван и что за сообщение ему было отправлено. Стектрейс при этом также не будет испорчен, и сможет дать дополнительную информацию о месте баги.
Простой пример для тех, кто ищет простой и быстрый путь отформатировать дату при разработке под iPhone. В моем примере будем форматировать дату по стандарту RFC2822.
Данный подход достаточно прост и эффективен, но у него есть один минус - куча строк, которые придется писать каждый раз, когда надо сделать преобразование. Чтобы этого избежать можно сделать так:
Хотите разрабатывать под айфон? Хотите использовать последнюю версию SDK 3.x? Нет проблем - идем на сайт Apple iPhone Dev Center и качаем. Но что делать, если у вас хакинтош версии ниже, чем 10.5.7 и обновиться никак не получается? На моем ноутбуке установлена iDeneb 10.5.6 и соответственно iPhone SDK 3.1.2 ставиться не собирается, предлагая мне обновить систему.
Возится с обновлением совсем не хотелось, к тому же, инсталятор SDK можно легко обмануть. Итак, качаем SDK 3.1.2 под наш леопард и перед установкой делаем следующее:
![]()
В последнее время в сети появилось огромное количество статей от iPhone-разработчиков, которые сколотили свой первый миллион. Чего только стоит признание девелоперов Tap Tap Revenge о том, как они зарабатывают по $ 1 000 000 в месяц! Действительно, если посмотреть на предложения платного софта в App Store, то можно найти очень много, достаточно простых программ, написание, которых вряд ли отняло у разработчика больше пары дней. Не смотря на это, товарищи не стесняются ставить цену хотя бы в $ 0.99 и надеяться на большие продажи.
Собственно, а почему бы не попробовать и нам? Естественно, для разработки под айфон вам потребуется как минимум Mac / хакинтош, Xcode, прямые руки и хорошая идея. Но и это еще не все. Чтобы выставить свое приложение в магазине Apple, нужно сначала в нем зарегистрироваться. Вроде ничего сложного, да? Так и есть, если вы не проживаете в Российской Федерации.
Чтобы залить свой модный рингтон в Apple iPhone, необходимо проделать несколько нехитрых шагов. Итак, допустим вы уже выбрали желаемую мелодию...
1. Сперва нужно обрезать мелодию так, чтобы ее продолжительность была не более 30 секунд. Для этого можно воспользоваться любым аудио-редактором или даже онлайн сервисами, такими как Audiko.
2. Запускаем iTunes и добавляем наш mp3-файл в медиатеку путем перетаскивания файла в окно программы.
Интересную политику проводит Apple в плане синхронизации iPhone с компьютером. Если использовать одну машину, то все отлично, но стоит попробовать подключить его к другой, как сразу же перестают запускаться все загруженные из App Store приложения. А что делать, если хочется синхронизировать телефон с ноутбуком и домашним компьютером?
Во время разработки программного обеспечения под iPhone столкнулся со следующей проблемой. Стандартная среда разработки позволяет запускать приложение на эмуляторе телефона, либо на самом аппарате (дабы была возможность протестировать все на реальной платформе). Так вот, если выбрать второй вариант, среда разработки попытается поставить созданное приложение на телефон и тут то и начинаются проблемы. Сначала Xcode дал критическую ошибку на тему того, что не задан какой-то сертификат. Выяснилось, что чтобы получить данный сертификат необходимо отстегнуть Apple минимум 100 баксов!
Apple запатентовала новую технологию, которая позволит дисплеям iPhone всегда находиться во включенном состоянии без ущерба для батареи.
Правда, это не означает, что весь дисплей будет непрерывно "светиться". В действительности, активирована будет лишь его часть – используя дополнительную систему подсветки, расположенную под основной. По словам Apple, основной задачей инновации является организация для пользователя постоянной обратной связи с устройством, даже когда основной дисплей выключен.
Последние комментарии
5 дней 21 час назад
6 дней 15 часов назад
1 неделя 1 час назад
1 неделя 17 часов назад
1 неделя 17 часов назад
1 неделя 17 часов назад
1 неделя 17 часов назад
1 неделя 17 часов назад
1 неделя 17 часов назад
2 недели 1 день назад