Подтвердить что ты не робот

Автоматическая ошибка подсчета ссылок: передача адреса нелокального объекта в параметр __autoreleasing для обратной записи

Я пытаюсь передать указатель на указатель на метод, но, видимо, у ARC есть некоторые проблемы с тем, как я это делаю. Здесь два метода:

+ (NSString *)personPropertyNameForIndex:(kSHLPersonDetailsTableRowIndex)index 
{
    static NSArray *propertyNames = nil;

    (nil == propertyNames) ? 
        [self SHL_initPersonPropertyNamesWithArray:&propertyNames] : NULL;
}

+ (void)SHL_initPersonPropertyNamesWithArray:(NSArray **)theArray
{
    *theArray = [[NSArray alloc] 
                 initWithObjects:@"name", @"email", @"birthdate", @"phone", nil];
}

Я получаю следующую ошибку:

Ошибка автоматического подсчета ссылок: передача адреса нелокального объекта параметру __autoreleasing для обратной записи

В строке, на которой появляется следующая команда:

[self SHL_initPersonPropertyNamesWithArray:&propertyNames] : NULL;
4b9b3361

Ответ 1

Для этого случая необходим определитель __strong storage.

+ (void)SHL_initPersonPropertyNamesWithArray:(NSArray * __strong *)theArray

Однако этот код не соответствует Правилам управления основной памятью.

У вас есть любой объект, который вы создаете

Вы создаете объект, используя метод, имя которого начинается с "alloc", "new", "copy" или "mutableCopy" (например, alloc, newObject или mutableCopy).

По какой причине вы хотите это сделать?