0

画像の遅延読み込みを実行するプロジェクトに取り組んでいます。imagedownloader が画像をダウンロードすると、そのデリゲートにメッセージを送信して画像を処理します。しかし、View Controllerであるそのデリゲートがメモリから割り当て解除されると、imagedownloaderクラスがすでに死んでいるデリゲートにメッセージを送信したくありません。imagedownloader のデリゲートをいつ nil に設定できるかを知る必要がありますか?? 私のターゲットは iOS4.0 に設定されているため、弱い参照を使用できません。そして、デリゲートに完了メッセージを送信する準備ができている辞書に格納されている imagedownloader の多くのインスタンスがあります。保存されているすべてのインスタンスのデリゲートを nil に設定する必要があります。

-(void)viewWillDisappear:(BOOL)animated
{
    for(imagedownloader *imagedownloaderObj in dict)
    {
        imagedownloaderObj.delegate = nil;
    }

    [super viewWillDisAppear:animated]
}

しかし、ループでクラッシュします。誰か助けてください...そして私の下手な英語で申し訳ありませんが、あなたがそれを理解してくれることを願っています..

4

1 に答える 1

1

コードに問題があります。オブジェクトではなく、キーを列挙する辞書を列挙しています。代わりにあなたがしたい:

for(ImageDownloader *imageDownloader in [imageDownloaderDictionary allValues])
{
    if (imageDownloader.delegate == self)
        imageDownloader.delegate = nil;
} //note - I've adjusted naming to match Objective-C style conventions. It fits in better with the framework code now.

deallocまた、代わりにこれを行うと思います。割り当てを解除する前に常にメソッドを取得できるかどうかはわかりません。viewWillDisappear:以前のバージョンのiOS(iOS4を含む)では、それを保証することはできませんでした。さらに、そのビューに戻った場合に、画像を再度ダウンロードする時間を無駄にしたくありません。

于 2012-10-05T08:13:44.383 に答える