この質問は少し混乱しました。 ".h"ファイルにあります。Objective cの保持とコピーについての質問
@property (nonatomic,retain) NSMutableString *str1;
@property (nonatomic,copy) NSMutableString *str2;
".m"ファイルにあります。
NSMutableString *testRetain = [[NSMutableString alloc] initWithString:@"prefix"];
NSLog(@"retain count is %d",[testRetain retainCount]);
NSLog(@"mem add is %p",testRetain);
str1 = testRetain;
NSLog(@"retain count is %d",[testRetain retainCount]);
NSLog(@"mem add is %p",testRetain);
str2 = testRetain;
NSLog(@"retain count is %d",[str2 retainCount]);
NSLog(@"mem add is %p",str2);
すべてのretainCountとメモリアドレスが同じです。 @property(nonatomic、retain)は、pointedオブジェクトのretainCountを追加します。したがって、コードの2番目の部分は、同じメモリアドレスと異なるcontainsCountをコードの最初の部分から出力する必要があります。 と@property(nonatomic、copy)はオブジェクトを新しい領域にコピーします.3番目のコード部分は、最初の部分から別のメモリアドレスを出力します。 なぜ私はこの結果を得たのですか? ありがとうございました。
どのような結果が得られましたか? –
'str1 = testRetain'はivarを直接同じメモリアドレスに設定しています。アクセサーを使用するには、 'self.str1 = testRetain;を使用する必要があります。 self.str2 = testRetain' – mackross
マックロスが正しいです。 –