14

メソッドへのポインタにポインタを渡そうとしていますが、どうやらARCにはそれを行う方法にいくつかの問題があります。ここに2つの方法があります。

+ (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;
4

1 に答える 1

27

この場合、__strongストレージ修飾子が必要です。

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

ただし、このコードは基本的なメモリ管理ルールに準拠していません。

作成したオブジェクトはすべて所有します

名前が「alloc」、「new」、「copy」、または「mutableCopy」で始まるメソッド(たとえば、alloc、newObject、mutableCopy)を使用してオブジェクトを作成します。

どういう理由でこれをしたいですか?

于 2011-09-14T20:37:57.377 に答える