autorelease используется для возвращаемого функционального объекта, поэтому вызывающий абонент не принимает права собственности, а вызываемый освободит объект в будущем.
Тем не менее, ARC может рассчитывать право собственности на вызывающего абонента и выпускать его после использования, то есть он может вести себя так же, как Smart Pointer на С++. С ARC он может избавиться от автореферата, потому что автореферат не является детерминированным.
Причина, по которой я задаю этот вопрос, заключается в том, что я вижу возвращаемые объекты, вызывающие dealloc ранее в ARC, чем код, не относящийся к ARC. Это заставляет меня думать, что ARC может выглядеть как Smart Pointer и может сделать авторекламу бесполезной. Это правда или возможно? Единственное, что я могу сказать о полезности автореферата, - это многопоточный или сетевой код, потому что, возможно, не так просто подсчитать право собственности, когда объект проходит.
Спасибо за ваши мысли.
Вот новое редактирование, чтобы все было ясно:
с авторекламой
+ (MyClass*) myClass
{
return [[[MyCClass alloc] init] autorelease];
}
- doSomething
{
MyClass *obj = [MyClass myClass];
}
С ARC:
+ (MyClass*) myClass
{
return [[MyCClass alloc] init]; // no autorelease
}
- doSomething
{
MyClass *obj = [MyClass myClass];
// insert [obj release]
}
Итак, нам действительно не нужна автореферат.