class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

основы

введение
строки
массивы
ассоциативные массивы
значения null и nil

ООП

создание класса
конструктор/деструктор
методы
инкапсуля́ция
свойства
протокол
категории
селектор

разное

исключения
управление памятью

Справочник по Objective-c

Управление памятью

Объекты хранят в себе счетчик ссылок на себя. Когда счетчик равен 0, объект удаляется.

По соглашению, объект созданный с префиксом init или copy уже имеет счетчик равный 1. Соответственно, если объект больше не будет использоваться, нужно этот счетчик уменьшить.


// создали объект
NSString * str = [[NSString alloc] initWithFormat: @"%d" , 150];
...
[str release]; // уменьшили счетчик

Соответственно, в методах возвращающих объект и имеющих префикс init, new, copy счетчик уменьшать не надо.


- (MyObj *) newMyObj {    
    return [[MyObj alloc] init];
}

Объекты созданые другим способом являются самоуничтожающимися. Они также уже имеют счетчик равным 1. Их можно использовать в контексте, где они были созданы. Посылать сообщение release не нужно. Но если вы планируете использовать объект позже в другом месте, то счетчик нужно увеличить, а потом уменьшить когда нужно.


// создали объект
NSString * str = [NSString stringWithFormat:@"%d", 150]; 
...
// объект самоуничтожиться
}

Объекты созданные первым способом, также можно сделать самоуничтожающимися, послав им сообщение autorelease.


// возвращаем из метода объект с самоуничтоожением
return [obj autorelease];

пул самоуничтожающихся объектов

Механизм пулов позволяет создавать временные объекты, которые будут уничтожены автоматически. В общих случаях нет необходимости создавать свой пул.

Механизм пулов организован в виде стека. Если вы создаете новый пул, он добавляется в вершину стека. Объекты добавляются в пул, который на вершине стека для текущего потока.

Пул описывается классом NSAutoreleasePool и содержит в себе объекты, которым было послано сообщение autorelease. Когда пул уничтожается, уничтожаются все объекты в нем.

Cocoa всегда проверяет чтобы пул был в наличии. Если послать сообщение autorelease, когда пула нет, в логах будет выдано сообщение об ошибке. Библиотеки AppKit и UIKit автоматически создают пул вначале каждой итерации события, как клик по мыши.

Таким образом, есть три случая когда нужно создавать пул самому:

Пулы не должны быть членами класса.


// пример из офф док.
NSArray *urls = <# какой-то массив урл #>;
for (NSURL *url in urls) {
    NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];
    NSError *error = nil;
    NSString *fileContents = [[[NSString alloc] initWithContentsOfURL:url
                  encoding:NSUTF8StringEncoding error:&error] autorelease];
    /* как-то используем наши строки */
    ...
    [loopPool drain];
}

Рейтинг@Mail.ru