Автоматическая ошибка подсчета ссылок: передача адреса нелокального объекта в параметр __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;
Ответы
Ответ 1
Для этого случая необходим определитель __strong storage.
+ (void)SHL_initPersonPropertyNamesWithArray:(NSArray * __strong *)theArray
Однако этот код не соответствует Правилам управления основной памятью.
У вас есть любой объект, который вы создаете
Вы создаете объект, используя метод, имя которого начинается с "alloc", "new", "copy" или "mutableCopy" (например, alloc, newObject или mutableCopy).
По какой причине вы хотите это сделать?