2011-07-27 12 views
0

私は新しいiPhone開発者です。私は既存のiPhoneアプリをアップグレードしています。コアデータモデルを使用してデータを保存しています。 アプリでは、画像を追加するための15個の四角いボックスがあります。別のプロセスを作るために分離スレッドを呼び出しています。このプロセスでは、イメージを2つのサイズに保存しています。私は画像オブジェクトをオブザーバに追加し、最後にオブザーバを削除しました。イメージを追加しようとするとクラッシュするアプリ..?

私はオブザーバーを追加するには、このメソッドを使用しています: -

[projectImage addObserver:self forKeyPath:@"fileName" options:NSKeyValueObservingOptionNew context:nil]; 

そして、別のスレッドを作成するためのこの方法: -

[NSThread detachNewThreadSelector:@selector(addImage:) toTarget:self withObject:[dic retain]]; 

ここAddImageは次のようにする方法である: -

- (void) addImage:(NSDictionary *) dic { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    UIImage *image = [dic objectForKey:@"image"]; 
    projectImage = nil; 
    projectImage = [dic objectForKey:@"managedObject"]; 
    [projectImage importImageData:image]; 
    [projectImage removeObserver:self forKeyPath:@"fileName"]; 
    [pool drain]; 
} 

dicは辞書です

私の問題は: カメラや電話ライブラリで4〜5枚の画像を撮影した後にクラッシュしています。

この問題を解決する方法があれば教えてください。アドバンス

答えて

1

おかげで、あなたはメモリをリークしている、そしておそらくこのために、あなたのアプリがクラッシュします。私は、アプリがメモリ不足になり、殺されると思う。

削除は[dic retain]

[NSThread detachNewThreadSelector:@selector(addImage:) toTarget:self withObject:[dic retain]]; 

からオブジェクトは、メソッド呼び出しによって保持されます。 detachNewThreadSelector:toTarget:withObject:の説明を参照してください。

オブジェクトaTargetとanArgumentは、分離されたスレッドの実行中に保持され、解放されます。デタッチされたスレッドは、aTargetがaSelectorメソッドの実行を完了するとすぐに終了クラスメソッドを使用して終了します。

あなたの呼び出しが

[NSThread detachNewThreadSelector:@selector(addImage:) toTarget:self withObject:dic]; 
+0

おかげで返事をfluchtpunktする必要があり、私はこれをやっていたが、それは動作していない、それはメモリリークが原因何が起こっている可能性があります。 – user864852

+0

他のプロセスを実行した後に実行する方法を同期させるためのヒントを教えていただけますか?どうすればいいですか?この画像保存方法を一度に実行したいと思っています。 – user864852

関連する問題