ARC Migration Tool на 10.7 выдает ошибку: небезопасно удалять неиспользуемое сообщение «autorelease» - PullRequest
4 голосов
/ 07 сентября 2011

Я унаследовал приложение, разработанное на 10.6, и хочу перейти на 10.7. Я хотел бы соблюдать автоматический подсчет ссылок, и я начал его. Помощник по конвертации отправляет мне сообщение об ошибке: «[переписывающее устройство] небезопасно удалять неиспользуемое сообщение об автозапуске; его получатель может быть немедленно уничтожен »и указывает на следующий метод:

+ (MyClass *)deserializeNode:(xmlNodePtr)cur
{
    MyClass *newObject = [[MyClass new] autorelease];

    [newObject deserializeAttributesFromNode:cur];
    [newObject deserializeElementsFromNode:cur];

    return newObject;
}

Это было бы в значительной степени нормальным стилем (за исключением некрасивого «нового» сообщения) в старой среде сохранения / выпуска, однако среда ARC этого не допускает. Это не кажется мне очень хорошим решением, но я должен создать опрос с новой директивой, как это? Это правильно вообще?

+ (MyClass *)deserializeNode:(xmlNodePtr)cur
{
    MyClass *newObject;
    @autorelease
    {
       newObject = [MyClass new];

       [newObject deserializeAttributesFromNode:cur];
       [newObject deserializeElementsFromNode:cur];
    }

    return newObject;
}

Разве это не выпустит 'newObject' до возвращения?

1 Ответ

1 голос
/ 09 октября 2011

Блок @autorelease просто создает новый пул автоматического выпуска вокруг этого раздела кода.Он ничего не делает для фактического управления памятью кода внутри этого блока.

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

...