Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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;
like image 499
Rami Avatar asked Sep 14 '11 11:09

Rami


1 Answers

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?

like image 96
Kazuki Sakamoto Avatar answered Nov 15 '22 14:11

Kazuki Sakamoto