0

ARC には copy プロパティがありません。オブジェクトをコピーしたい場合はどうすればよいですか? 次に、テスト コードを記述します。

test.h

@property (strong, nonatomic) NSMutableString *str1;
@property (strong, nonatomic) NSMutableString *str2;

test.m

self.str1 = [[NSMutableString alloc] initWithString:@"Hello"];
self.str2 = [self.str1 copy];
[self.str2 appendString:@"World"];
NSLog(@"str1:%@,str2:%@",self.str1,self.str2);

実行すると、クラッシュしました:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with appendString:'

それで、どうすればいいですか?

4

1 に答える 1

6

copyオブジェクトの不変のコピーを常に返す必要があり、mutableCopy(利用可能な場合) レシーバーが可変か不変かに関係なく、常に可変オブジェクトを返す必要があります。このようにして、 a を要求すると不変になり、 a を要求すると可変になるcopyことを確認できます。mutableCopy

この概念は何年も前からあり、ARC に固有のものではありません。ARC は、オブジェクトの可変性ではなく、単にオブジェクトのメモリ管理を処理します。

于 2012-05-17T03:53:11.870 に答える