0

私のアプリケーションの画面の1つに、高解像度の背景があり、古いデバイスでは読み込みに時間がかかりすぎます。背景UIImageがゾンビのデリゲートになります

私の解決方法は、デリゲートのイメージにプリロードしてから再利用することです。

@property (nonatomic, strong, retain) UIColor *fabricColor; 

と私はdidFinishLaunchingでの画像読み込み:したがって

、私は私のデリゲートでプロパティを持って、私は私のナビゲーションコントローラにdelegate.fabricColorを参照しようとすると、しかし

fabricColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg.png"]]; 

を、それはゾンビです:

AppDelegate *dg = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
self.view.backgroundColor = dg.fabricColor; //Doesn't work 

私はfabricColorを使うことができるように、これは起こっていませんか?

いくつかの注意事項:

  • 私はARCを使用してないです。
  • 私のデリゲートのdeallocをの最初の行がある「[fabricColorリリース]」

答えて

2

使用プロパティを保持するためにあなたのIVARに値を設定する:あなたのコードで

self.fabricColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg.png"]]; 

を、あなたは、単に自動解放値を割り当てますあなたのインスタンス変数を保持せずに - それを使用しようとする前にしばらく後に割り当てを解除します

+0

ありがとう、あなたはウラジミール!それは全体の問題を解決しました。 self.propertyNameが必要な理由をもう一度説明できますか? (つまり、自己とそれを使用しない間の違いは何ですか?) – Eitan

+1

@ eitan27、+ colorWithPatternImageメソッドはオートレリースオブジェクトを返しますので、保持する必要があります。そうでなければ、あなたのケースでは割り当てが解除されます。 (実際に自動的に合成されたsetFabricColor:メソッドが呼び出され、古いivar値が解放され、新しい値が保持されます)。プロパティを使用すると、多くのメモリ管理機能をすぐに使用できるので、可能な限り使用します – Vladimir

関連する問題