私はプロパティについて学んでいましたが、さまざまなドキュメントを読みましたが、プロパティがどのように機能するかについてまだ明確ではなく、混乱するシナリオに出くわしました.次のように 1 つのプロパティを作成する 1 つのサンプル アプリを作成しました。
@property(nonatomic,retain)NSString *strValue;
そしてそれを合成します:
@synthesize strValue;
1) 最初のシナリオ:
viewDidLoad で私は書いた:
strValue = [[NSString stringWithFormat:@"value"] retain];
dealloc で私は書いた:
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
リークなしで正常に機能しました。私の質問は次のとおりです。保持されたプロパティ strValue(@property(nonatomic,retain)NSString *strValue;) を作成したときに保持されたメモリはどうなりましたか?
2) 2 番目のシナリオ:
viewDidLoad で私は書いた:
self.strValue = [[NSString stringWithFormat:@"value"] retain];
dealloc で私は書いた:
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
self.strValue = [[NSString stringWithFormat:@"value"] preserve] 行でメモリ リークを示しました。質問は次のとおりです。ここでメモリ リークが表示されるのはなぜですか?この行は、次のコード行と同等ではありませんか?
[strValue release];
[strValue retain];
3) 3 番目のシナリオ: viewDidLoad に次のように記述しました。
self.strValue = [NSString stringWithFormat:@"value"];
dealloc で私は書いた:
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
メモリ リークやダングリング リファレンスがなくても問題なく動作しました。プロパティが実際にどのように機能するかを誰か説明できますか?プロパティを使用するときにメモリがどのように割り当てられ、解放されるのですか?