Возврат автоматически выпущенных объектов с использованием ARC - PullRequest
8 голосов
/ 30 октября 2011

Предполагая, что я написал код ниже для класса A:

-(NSArray *) returnListNames {

    NSArray *returnList = [NSArray arrayWithArray:myListNames];

    return (returnList);
}

И в классе BI получим этот список в некоторой области следующим образом:

{
    /* Without ARC I would  retain the array returned from ClassA 
       to guarantee its reference like this:
       [[myClassA returnListNames] retain]; */

    NSArray *myNames = [myClassA returnListNames];  

}

Учитывая, чтоreturnList был выделен с помощью метода автоматического выпуска, как я могу гарантировать, что я не потеряю ссылку на него с помощью ARC (при котором я не могу использовать retain)?Должен ли я использовать [[NSArray alloc] init] в массиве myNames?Или я должен использовать alloc на returnList вместо метода автоматического выпуска?Или я могу просто положиться на ARC?Или есть другое решение?

1 Ответ

12 голосов
/ 30 октября 2011

ARC справится с этим для вас, так что вы можете просто положиться на него и заняться своими делами с этим массивом. Если он обнаружит, что вам нужно сохранить myNames, он добавит для вас вызов сохранения, например, или сделает все остальное, что он на самом деле делает, когда вы компилируете код, который его использует.

...