0

Xcode のツールを使用して、プロジェクトを MRR から ARC に移動しました。次のように機能するルーチンがあります。

@interface myObject 
{
    NSMutableArray* __strong myItems;
}
@property  NSMutableArray* myItems;
- (BOOL) readLegacyFormatItems;
@end



- (BOOL) readLegacyFormatItems
{
    NSMutableArray* localCopyOfMyItems = [[NSMutableArray alloc]init];
    //create objects and store them to localCopyOfMyItems

    [self setMyItems: localCopyOfMyItems]

    return TRUE;
}

これは MRR では問題なく機能しましたが、ARC では myItems がすぐに解放されます。どうすればこれを修正できますか?

__strong および __weak 参照について読んだことがありますが、この場合にそれらを適用する方法はまだわかりません。

情報をお寄せいただきありがとうございます。

4

1 に答える 1

1

これはそのまま動作するはずです。ただし、iVar を宣言する必要はもうありません。プロパティを使用するだけです。それらを合成する必要さえありません。強いプロパティは割り当てられたオブジェクトを保持しますが、弱いプロパティは保持しません。

また、クラス名は常に大文字にする必要があります。また、変更可能な配列を保存するため、オブジェクトをプロパティに直接追加することもできます。別のローカル可変配列変数は必要ありません。

@interface MyObject 
@property (nonatomic, strong) NSMutableArray *myItems;
- (BOOL)readLegacyFormatItems;
@end


@implementation MyObject

- (BOOL) readLegacyFormatItems
{
    self.myItems = [[NSMutableArray alloc]init];

    //create objects and store them directly to self.myItems

    return TRUE;
}

@end
于 2013-07-05T23:22:22.277 に答える