我開發了我的第一個應用程序,但仍在學習。剛剛更新了Xcode 5昨天和我的iPhone 5運行iOS 7.1。我現在正在理解Instruments工具來分析我的應用程序。我正在使用樂器中的泄漏配置文件,並遇到了我無法弄清楚的保留週期和泄漏情況。感謝我能夠理解的任何幫助a)如何查明錯誤和b)我做錯了什麼以及將來如何避免它。使用儀器跟蹤內存泄漏Xcode5和iOS7
在我的應用程序中,我使用相機拍照。當相機開始工作時,我在屏幕上點擊以進行對焦,這是當我注意到樂器中出現泄漏時。看起來有一個保留週期不在我的代碼中(如果我理解正確的話),並且我的代碼中有一個根本泄漏,我不明白。
我正在使用ARC,所以我不應該在我的代碼中指出我的代碼部分(下面的第2部分,代碼)中發佈「選擇器」。
- 我可以做的保留週期是什麼。這不是我的代碼,但我仍然是它的原因嗎?它是否源自「根源泄漏?」如果我不負責,我該怎麼辦?
- 我在這個堆棧跟蹤唯一的代碼並不能幫助我明白的地方泄漏的來源。線是儀器指向我在我的代碼是[選擇器dismissViewControllerAnimated:YES完成:無];在我的imagePickerController:didFinishPickingMediaWithInfo:方法。我正在粘貼下面的代碼。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *pickerImage = [info objectForKey: UIImagePickerControllerOriginalImage]; _imageView.image = pickerImage; [picker dismissViewControllerAnimated:YES completion:nil]; // <--- mem-leak }
編輯 - 在創建我的UIImagePickerController代碼。
- (IBAction)snapPicture:(id)sender { UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; // If the camera button was tapped AND we have a camera, use it... if ((sender == _cameraButton) && [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera]; } else { [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; } imagePicker.delegate = self; // bring up the image picker view [self presentViewController:imagePicker animated:YES completion:nil]; }
你可以發佈你創建'UIImagePickerController'的代碼嗎? – Austin
那麼什麼是CAMBlurredSnapshotView?我的意思是,這顯然是問題的原因。這是你從別的地方拿走的代碼嗎? – matt
@奧斯汀 - 無法弄清楚如何在這裏創建代碼塊。你可以在這裏看到我在哪裏創建UIImagePickerController的方法:http://pastebin.com/7s37iaFA – knarf74