2011-10-14 14 views
0

なかったimageRawがIVARである私の方法の1つの中のコードは、次のとおりです。割り当て解除インスタンスに送信された解放メッセージが、インスタンスのポインタは、ここではnil

if (imageRaw) 
    [imageRaw release]; // error occurs here 
    . 
    . 
    . 
if (anImage) 
    imageRaw = [[anImage scaleToFitWithin:maxImageSize interpolationQuality:kCGInterpolationHigh] retain];   

私は時折、このタイプのエラーがあった、と私はそれを本当に理解していない。それが非nilである唯一の方法は、この場合、適切なクラスUIImageのインスタンスへの代入によるものです。

ゾンビが有効になっています。

私がこのような場合にしようとしているのは、既存のインスタンスの割り当てが解除され、同じポインタを新規にインスタンス化して保持することができるためです。

答えて

1

実行中のある時点で、imageRawに何かが格納されているのにこのメソッドが呼び出されていますが、anImageに何も格納されていないとします。この場合、imageRawのオブジェクトは解放されますが、新しいものは保存されません。これにより、解放されたオブジェクトのメモリアドレスはimageRawに残りますが、オブジェクトは存在しなくなります。次に、メソッドを次に実行すると、imageRawがnilでないかどうかがチェックされます(メモリアドレスがまだ保持されているため)。releaseをそのメモリに呼び出しようとすると失敗します。これを避けるには、リリースを呼び出すたびにimageRawをnilに設定する必要があります。

+0

ありがとう、Sean。 imageRaw =私のメソッドをチェックしました。私は過去に同様の問題を引き起こしていると思われるオートレスアを割り当てました。私は何も見ませんでした。だから私はあなたの推薦でテストしています。私は問題が解決したと言うことができる前にテストに時間がかかるだろうが、これが解決すれば私が知っていればここに戻ってくるだろう。 – Jim

関連する問題