Automatic Reference Counting Issue: Passing address of non-local object to __autoreleasing parameter for write-back

自闭症网瘾萝莉.ら 提交于 2019-11-27 02:12:33

问题


I'm trying to pass pointer to pointer to a method, but apparently ARC has some issues with how I'm doing it. Here the two methods:

+ (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];
}

I receive the following error:

Automatic Reference Counting Issue: Passing address of non-local object to __autoreleasing parameter for write-back

On the line which the following command appears:

[self SHL_initPersonPropertyNamesWithArray:&propertyNames] : NULL;

回答1:


The __strong storage qualifier is needed for this case.

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

However, this code doesn't follow the Basic Memory Management Rules.

You own any object you create

You create an object using a method whose name begins with “alloc”, “new”, “copy”, or “mutableCopy” (for example, alloc, newObject, or mutableCopy).

For what reason do you want to do this?



来源:https://stackoverflow.com/questions/7415301/automatic-reference-counting-issue-passing-address-of-non-local-object-to-aut

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!