Инструмент миграции ARC на 10.7 выдает ошибку: небезопасно удалять неиспользуемое сообщение «autorelease»

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

+ (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» перед возвратом?


person mbpro    schedule 07.09.2011    source источник
comment
Вы нашли решение для этого?   -  person Kamchatka    schedule 13.10.2011


Ответы (1)


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

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

person Flyingdiver    schedule 09.10.2011
comment
Я изменил все задействованные имена, но сообщение осталось... В любом случае спасибо за предложение - person mbpro; 16.10.2011