2011-11-05 9 views
0

これは初心者の質問に聞こえるかもしれませんが、私はiOS開発者が初めてです。UIPickerControllerを開いて閉じているときにメモリリークが発生する

私は次のコードを書いています。

- (void) onUploadButtonClick 
{ 
    UIImagePickerController* imgPicker = [[UIImagePickerController alloc] init]; 
    [[[UIApplication sharedApplication] keyWindow] setRootViewController:imgPicker]; 
    imgPicker.delegate = self; 
    imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
    imgPicker.allowsEditing = NO; 
    [self presentModalViewController:imgPicker animated:YES]; 
    [imgPicker release]; 
} 

だけボタンをクリックし、私はメモリリークを取得しています何もせず、それを閉じることにより、だから私は、メモリリークのためのアプリやプロファイリングを実行していますよ。私はシミュレータでこれを実行しています。

これはなぜ起こりますか?

UPDATE:プロファイラのコンソール リークされたオブジェクトからの情報、#住所サイズ責任ライブラリ責任フレームをリーク

Malloc 32.50 KB,3 <multiple> 99840 MusicLibrary MemNewPtrClear 
Malloc 32.50 KB, 0xa083800 33280 MusicLibrary MemNewPtrClear 
Malloc 32.50 KB, 0x7840a00 33280 MusicLibrary MemNewPtrClear 
Malloc 32.50 KB, 0x7806a00 33280 MusicLibrary MemNewPtrClear 


Leaked Object,# Address Size Responsible Library Responsible Frame 
Malloc 32.50 KB, 0xa083800 33280 MusicLibrary MemNewPtrClear 


Leaked Object,# Address Size Responsible Library Responsible Frame 
Malloc 32.50 KB, 0x7840a00 33280 MusicLibrary MemNewPtrClear 


Leaked Object,# Address Size Responsible Library Responsible Frame 
Malloc 32.50 KB, 0x7806a00 33280 MusicLibrary MemNewPtrClear 


Leaked Object,# Address Size Responsible Library Responsible Frame 
Malloc 128.00 KB, 0x128de000 131072 MusicLibrary ReadITImageDB 

答えて

1

なぜあなたは今までにUIImagePickerControllerとそのようなことをしますか?あなたは実際にあなたの実際のrootViewControllerを殺しています。

[[[UIApplication sharedApplication] keyWindow] setRootViewController:imgPicker]; 

この行を削除するとすべて正常に機能します。

+0

実際には、その行を削除しても、メモリはまだ漏れています。 その行は、コンソールのメッセージを回避するために、他の方法でそのメッセージを削除することですか? 2011-11-05 16:25:21.791 PostCardPrinter [4769:207] 2段階の回転アニメーションを使用します。スムーズな1ステージアニメーションを使用するには、このアプリケーションで2段階のメソッド実装を削除する必要があります。 PostCardPrinter [4769:207] 2つ以上のビューコントローラまたはビューコントローラを回転させてウィンドウ代理人でない場合、2段階回転アニメーションを使用することはできません – deimus

+0

このリンクが見つかりました。それが助けてくれることを願って。 http://stackoverflow.com/questions/2878947/getting-using-two-stage-rotation-animation-warning-with-uiimagepickercontrolle – Eugene

+0

はい、それは私がして元の投稿で投稿した方法です。まだ漏れている – deimus

1

UINavigationControllerを使用し、UIImagePickerControllerを押してください。または、UIImagePickerControllerをモーダルに表示してください。ルートコントローラとしてUIImagePickerControllerを設定すると、以前のrootViewControllerが失われていて、それを元に戻すことができなくなります。メモリリークは、ルートUIViewControllerviewDidUnloadとdeallocメソッドを正しく実装していないことが原因である可能性があります。

関連する問題