4

私は私のviewControllerUIImagePickerを使用していますためUIImagePickerでは常に、時にカメラ

をメモリの警告を取得し、2、私は常にメモリの警告を取得する方法の種類だけでなく、非常に有名な「wait_fencesがあります:返信を受け取れませんでした:10004003 "、

警告を促す特定のコード行をトレースすることはできません。いつも私がデバッグできないこれらのメソッドの直後に来ます。

// in myViewController.h 

// the first 2 are the methods that I alloc my UIImagePicker, 
// here, self.photoPicker is a retained property of UIImagePicker. 
- (IBAction)fromAlbumButtonTapped { 
    if (self.photoPicker == nil) { 
     self.photoPicker = [[[UIImagePickerController alloc] init] autorelease]; 
     self.photoPicker.delegate = self; 
    } 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { 
     self.photoPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
     [self presentModalViewController:self.photoPicker animated:YES]; 
     return; 
    } 
} 

- (IBAction)fromCameraButtonTapped { 
    if (self.photoPicker == nil) { 
     self.photoPicker = [[[UIImagePickerController alloc] init] autorelease]; 
     self.photoPicker.delegate = self; 
    } 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
     self.photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
     [self presentModalViewController:self.photoPicker animated:YES]; 
     return; 
    } 
} 
// and this is another part that gives me the memory warning - getting a photo. 
- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    self._photo = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    self.photoView.photoView.image = self._photo; 
    [self.photoButton setImage:self._photo forState:UIControlStateNormal]; 
    [self dismissModalViewControllerAnimated: YES]; 
} 

私はすでに自分のコードをチェックしていますが、私が知る限り、潜在的なメモリリークはありません。

私は、写真の扱いにいくらかのメモリがかかることを知っています。したがって、メモリ警告を受けるのは正常です。

しかし、問題がある場合があります。viewControllerちょうどreleaseナビゲーションスタック内のparentViewコントローラに戻るための警告など、何か重要なことがあります。

私のボタンや他の重要なものが早すぎると解放された場合、私はメモリ警告を受けたくありません。

これを修正する方法はありますか?

答えて

2

メモリ「損失」のすべてがリークに起因するわけではありません。ヒープショットを使用する。

保持されているがリークされていないメモリによるリークとメモリ損失を調べるために、計測器を使用します。後者はまだ使用されていない未使用のメモリです。インストゥルメンツの割り当てシステムでヒープショットを使用する。

ハウツー使用Heapshotは、メモリcreapを見つけるために

は、以下を参照してください。

bbum blogは、基本的にはこの方法では、楽器のツールを割り当てる実行heapshotを取る、あなたのコードの直感と3または4回繰り返し、別のheapshotを実行することがあります。これは、反復中に割り当てられ、解放されないメモリを示します。結果を把握するために

は、個々の割り当てを参照して開示しています。

あなたが保持し、リリースおよび自動解放オブジェクトの使用機器で発生場所を確認する必要がある場合:楽器で

実行]を、割り当てに(このオプションを設定するには、記録を停止しなければならない上に「レコードの参照カウント」を設定)。ピッカーを実行し、録画を停止し、ivar(datePickerView)を検索し、ドリルダウンして、すべての保持、リリース、および自動リースが発生した場所を確認することができます。あなたはUIImagePickerControllerを使用する場合

0

、あなたは写真を取得しています。写真はかなり大きいかもしれません。たとえば、8MPオンボードカメラの場合、実際には8MP * 3バイトです。各ピクセルはRGBであるため、パックされていない場合は8MP * 4 = 32MBです。だから、あなたがメモリ警告を受けていることは大きな驚きではありません。

didReceiveMemoryWarningとクリアメモリを上書きします。また、ビューをアンロードすることもできます(iOS 6より前)ので、viewWillLoadで適切に再読み込みできる必要があります。次へ

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
[imageView setImage:image]; 
[self dismissModalViewControllerAnimated:YES]; 
} 

を以下Memory Management

0

の変更を参照してください...

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
[self dismissModalViewControllerAnimated:YES]; 
[imageView setImage:image]; 
} 
関連する問題