пятница, 28 декабря 2012 г.

Ссылки и статьи для iOS-программистов


Моя страница в Evernote, куда я сохраняю различные ссылки и фрагменты статей, интересующие меня как iOS-разработчика

четверг, 1 ноября 2012 г.

Как отключать все вызовы NSLog для release-сборки

Опыт показывает, что перед release-сборкой очередной версии (для отправки в AppStore) комментировать десятки или даже сотни отладочных выводов в консоль слишком утомительно, да и не всегда полезно (некоторые выводы в консоль могут ещё пригодиться). Добавьте удобную макрофункцию где-нибудь в общий заголовок проекта (который включаете почти везде, например пусть это будет AppMacros.h).

#ifdef DEBUG
#define DLog(f, ...) NSLog(f, ## __VA_ARGS__)
#else
#define DLog(f, ...)
#endif

Теперь с помощью Find and Replace замените все NSLog на DLog. Если в некоторых исходниках вылезут ошибки компиляции, то добавьте в эти исходники #include "AppMacros.h"

суббота, 4 февраля 2012 г.

О важности IBOutlet прикрепления объектов к объекту-хозяину

Очень важно, если вы решили часть рутинных операций возложить на такой удобный инструмент как Interface Builder не забывать об одном правиле. Каждый объект, который создаётся не динамически в коде (например smthObject = [[SmthClass alloc] initWith... ]), а создан с помощью Interface Builder, каждый такой объект должен иметь своего хозяина (разве что главный делегат приложения гарантированно работает по умолчанию).

То есть любой ваш объект (созданный с помощью Interface Builder) должен принадлежать кому-нибудь как IBOutlet-переменная. Я убеждался в этом уже много раз на практике. Иначе происходят падения программы при попытке заставить этот объект что-либо сделать, из-за того, что у этого объекта (если он не принадлежит никому как IBOutlet-переменная) например вызывается метод, а объект вроде не существует (раз ни к кому не принадлежит). Может быть гуру-программисты дадут более точное объяснение этому явлению...

Постоянные читатели