Можете ли вы выделить объект, родительский класс которого использует пул автоматического выпуска? - PullRequest
2 голосов
/ 11 января 2010

У меня есть подкласс, который я использую alloc и init, чтобы создать экземпляр. В методе init я иду

self = [self initWithRect:spriteManager.imageRect spriteManager:spriteManager.manager];

Таким образом, родительский конструктор использует пул автоматического выпуска. Так что здесь происходит? Если я пытаюсь освободить объект, я получаю сообщение об ошибке. Должен ли я изменить свой метод init, чтобы он стал конструктором удобства, чтобы соответствовать политике размещения, копирования, новой собственности?

1 Ответ

4 голосов
/ 11 января 2010

Инициализатор суперкласса -initWithRect: spriteManager: не не помещает объект в пул автоматического выпуска. Соглашение об именах таково, что любой метод -init… устанавливает объект, который вы несете ответственность за освобождение.

Xcode предоставляет полезные шаблоны завершения кода для методов init и dealloc. Просто нажмите control-comma и начните вводить «init» или «dealloc». (Вы также можете набрать init и нажать control-запятую.) Шаблон init:

- (id) init
{
    self = [super init];
    if (self != nil)
    {
        // Your initializations
    }
    return self;
}

Вы бы заменили self = [super init] на строку, которую вы написали выше.

Шаблон Deloc - это

- (void) dealloc
{
    // Your deallocations
    [super dealloc];
}

[super dealloc] вызывает -dealloc суперкласса, который позаботится об освобождении того, что он настроил в вашем вызове -initWithRect: spriteManager: (а также обо всем, что он наследует от своего суперкласса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...