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

匿名 (未验证) 提交于 2019-12-03 01:57:01

问题:

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?



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