ARC i autorelease

autorelease jest używana dla zwróconego obiektu funkcji, więc wywołujący nie przejmuje prawa własności i wywołuje zwolnienie obiektu w przyszłości.

Jednak ARC jest w stanie policzyć własność dzwoniącego i zwolnić go po użyciu, to znaczy może zachowywać się tak, jak Smart Pointer w C ++. Dzięki ARC może pozbyć się autorelease, ponieważ autorelease jest niedeterministyczna.

Powodem, dla którego pytam o to pytanie, jest to, że widzę zwrócony obiekt wywołuje dealloc wcześniej w ARC niż kod nie-ARC. Prowadzi mnie to do wniosku, że ARC może zachowywać się jak inteligentny wskaźnik i może sprawić, że autorelease stanie się bezużyteczna. Czy to prawda czy możliwe? Jedyne, co mogę myśleć o użyteczności autorelease, to kod wielowątkowy lub kod sieci, ponieważ może być łatwiej policzyć własność, gdy obiekt przechodzi.

Dzięki za twoje myśli.

Oto nowa edycja, która ma wyjaśnić:

z autorelease

+ (MyClass*) myClass
{
    return [[[MyCClass alloc] init] autorelease];
}

- doSomething
{
   MyClass *obj = [MyClass myClass];
}

Z ARC:

+ (MyClass*) myClass
{
    return [[MyCClass alloc] init]; // no autorelease
}

- doSomething
{
   MyClass *obj = [MyClass myClass];
   // insert [obj release]
}

Więc naprawdę nie potrzebujemy autorelease.

questionAnswers(5)

yourAnswerToTheQuestion