- (void)viewDidLoad {
[super viewDidLoad];
landscape.image = [UIImage imageNamed:@"tenerife1.png"];
}
オブジェクトのimageプロパティに新しいUIImage
を割り当てます。メモリリークが発生するかどうかはわかりません。このような画像の割り当てはメモリリークの原因になりますか?
- (void)viewDidLoad {
[super viewDidLoad];
landscape.image = [UIImage imageNamed:@"tenerife1.png"];
}
オブジェクトのimageプロパティに新しいUIImage
を割り当てます。メモリリークが発生するかどうかはわかりません。このような画像の割り当てはメモリリークの原因になりますか?
いいえ、そうしてはいけません。古いイメージは新しいイメージを設定するときに自動的に解放され、 "imageNamed"メソッドは自動解放を使用するので、そこではOKです。
これは、どのようにimage
プロパティが定義されているかによって異なります。もしそれがretain
と定義されていたり、あるいはcopy
であっても、それは良いはずです。割り当てが解除されたメモリを参照しようとすると、プログラムが破損し、assign
と定義されてしまいます。
通常はありませんが、landscape.imageの定義方法によって異なります。上記のポストを参照してください。これらの多くを使用する場合は注意が必要です:
[UIImage imageNamed:@"tenerife1.png"];
をリリースしたことなく、これらの画像は、メモリがいっぱいにする傾向があるため。
ねえimageNamedは、キャッシュを制御できなくなったときに深刻なメモリ問題が発生します。つまり、画像の処理が完了したら、そのメモリを再利用することはできません。彼はimageNamed
をimageWithContentsOfFileを使用して代わりの提案 - 簡単にGoogle検索を使用すると、私はAppleのiPhoneテックトークにあったとプレゼンテーションを与える男は同じこいつを確認imageNamedで問題に直面しているどのように多くの人々知っているでしょう
ちょっとした小さな画像を持っているのであれば、細かい点ではimageWithContentsOfFileを使ってください。少し遅くても、独自のキャッシングロジックを実装してください。here
代わりに何を使うべきですか? – Thanks