-(Bar*) makeBar
{
return [[[Bar alloc] init] autorelease];
}
Второй случай - предпочтительный способ возврата объекта Objective-C. За исключением +alloc
, -copy...
и -create...
, метод не должен сохранять права собственности на возвращаемый объект, т. Е. Счет (сохранения) должен быть равен 0.
Однако, [[Bar alloc] init]
делает объект иметь retainCount +1, чтобы его отпустить перед возвратом. Но -release
немедленно освободит объект, делая метод бесполезным. Вот почему используется -autorelease
- это с задержкой -release
, т.е. объект будет освобожден в конце концов, но не сейчас, так что другие части кода все еще могут взаимодействовать с ним, однако счет сохранения может все еще быть сбалансированным до 0.
Bar *b = [[self makeBar] retain];
Вы должны не оставить его , если вы не хотите быть долгосрочным владельцем объекта b
.