私の研究で、私は奇妙な何かに出くわしました。
@interface Class {
NSString *_string
}
- (void) Method1 {
_string = @"ASDF";
}
当初、私はそれ_string
が自動解放プールの一部であると思っていましたが、実際にはそのメモリの側面については考えていませんでした。
このSO投稿を読んだ後、Objective C NSString *プロパティはカウントの奇数を保持します
いいえ、そうではなく、の保持カウント_string
は実際にはUINT_MAX
明らかに、自動解放プールの一部である私の考え_string
はまぐれであり、変数をどのように処理するかはどういうわけかうまくいきました。しかし、私が知りたいのは、いつ@"ASDF"
捨てられるのかということです。プロパティとセッターを使用する必要があることはわかっていますが、変数に定数を割り当てるのは非常に直感的であるため、このように見えるコードはおそらくたくさんあります。
これらの不変のリテラルNSString
のライフサイクルは何ですか。また、メモリに存在しなくなった[_string length]
ため、実際にエラーが返されるのはいつですか。@"ASDF"