1

私はこのコードを持っています:

imageNumber++;
UIImage *image = [[UIImage alloc]init];
            image = [UIImage imageNamed:[NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber]];
            [imageToColor setImage:image]; //<-- here it crash 
            [image release];

そのため、数分後にこのメッセージでアプリがクラッシュしました

[UIImage isKindOfClass:]: message sent to deallocated instance

どうして??手伝って頂けますか?

4

4 に答える 4

4
imageNumber++;
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber]];
[imageToColor setImage:image];

コードの問題は、UIImage画像変数にオブジェクトを割り当ててから、それを解放せずに、別の自動解放されたオブジェクトに設定することです。[UIImage imageNamed:]自動解放されたUIImageオブジェクトを返します。

于 2012-04-27T13:22:57.790 に答える
3

新しいイメージを割り当ててから、によって返された自動解放されたUIImageにそのポインタを割り当ててUIImage imageNamed:、メモリリークを引き起こします。次に、自動解放されたオブジェクトを解放しようとすると、再び解放されてエラーが発生します。

imageNumber++;
image = [UIImage imageNamed:[NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber]];
[imageToColor setImage:image]; //<-- here it crash 
于 2012-04-27T13:23:12.920 に答える
0

あなたはそれをすべて間違っているようです。最初にオブジェクトをalloc-initし、次にautorelasedオブジェクトをポインタに割り当てて、最初のオブジェクトをリークさせます。正しいコードは次のとおりです。

imageNumber++;
UIImage *image [UIImage imageNamed:[NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber]];
[imageToColor setImage:image];
于 2012-04-27T13:23:38.643 に答える
0

1) ファイルからイメージをロードする前に、空のイメージを割り当てる必要はありません。

2) 文字列 [NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber] で指定された画像が実際に存在し、アプリで使用できることを確認していますか?

その画像が見つからない場合、imageNamed 呼び出しは null を返します。デバッガーをステップ実行して、イメージが実際に読み込まれるかどうかを確認します。

于 2012-04-27T13:25:28.507 に答える