24 июня 2010 г.

Улучшаем NSLog()

Большим плюсом NSLog'а является возможность следить за состоянием программы без использования точек останова. Но не всегда информации предоставляемой этой функцией достаточно. Стандартный вывод NSLog() такой:

<дата> <время> <имя_приложения> [<pid>]  то, что выдаст NSLog

А хотелось бы чтобы в этой информации присутствовали как минимум имя исходного файла и номер строки. Кроме того было-бы желательно иметь возможность сохранять лог в файл.

Вариант для решения данной задачи и является нижеприведенный класс.

23 июня 2010 г.

Singleton в Objective-c

Для создания синглтона Cocoa Fundamentals Guide предлагает:
  1. Создать статическую переменную типа синглтона и проинициализировать ее nil. 
  2. В методе-фабрике класса создать экземпляр класса и присвоить его статической переменной. 
  3. Переопределить метод allocWithZone: чтобы удостоверится что никто кроме класса - фабрики не сможет создать экземпляр класса. 
  4. Реализовать методы copyWithZone:, release, retain, retainCount и autorelease (последние четыре не нужны при использования сборщика мусора). 

22 июня 2010 г.

Использование UIView в Cocos2D

Как бы ни был хорош Cocos2d для написания игр для iPhone, но когда возникает необходимость добавить какой-нибудь стандартный вид (например MFMailComposeViewController для отправки электронной почты) начинаются пляски с бубном.
После продолжительного гугления было найдено простое и элегантное решение.

Класс CCUIViewWrapper, состоящий из 100 строк кода позволяет заворачивать в себя стандартные UIKit'овские элементы и работать с ними как с обычными слоями. Например, все что нужно для вызова окна отправки почты:

MFMailComposeViewController *picker = [MFMailComposeViewController alloc];
[picker init];
picker.mailComposeDelegate = self;
// инициализация e-mail тут
CCUIViewWrapper *wrapper = [CCUIViewWrapper wrapperForUIView:picker.view];
[self addChild:wrapper];