自动引用计数问题:将非本地对象的地址传递给__autoreleasing参数以进行回写

Ram*_*ami 14 pointers objective-c ios5 automatic-ref-counting

我正在尝试将指针传递给指向某个方法的指针,但显然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];
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

自动引用计数问题:将非本地对象的地址传递给__autoreleasing参数以进行回写

在出现以下命令的行上:

[self SHL_initPersonPropertyNamesWithArray:&propertyNames] : NULL;
Run Code Online (Sandbox Code Playgroud)

Kaz*_*oto 27

此案例需要__strong存储限定符.

+ (void)SHL_initPersonPropertyNamesWithArray:(NSArray * __strong *)theArray
Run Code Online (Sandbox Code Playgroud)

但是,此代码不遵循基本内存管理规则.

您拥有自己创建的任何对象

使用名称以"alloc","new","copy"或"mutableCopy"开头的方法(例如,alloc,newObject或mutableCopy)创建对象.

你为什么要这样做?