要知道手动解决内存泄漏,并不像 ARC 在 iOS 中如何处理释放不需要的对象那么容易,感谢 Apple 引入 ARC,让工作变得轻松。但我是一个坚持手动解决内存泄漏的人,因为我正在处理不使用 ARC 的相当旧的代码。好的,让我解释一下这个问题。我的应用程序包含在应用程序中捕获图片的代码。这是做这项工作的一小段代码。
- (void) takePhoto
{
ipc = [[UIImagePickerController alloc] init];
NSLog(@"retain count of IPC is %d", [ipc retainCount]);
ipc.delegate = self;
NSLog(@"retain count of IPC is %d", [ipc retainCount]);
if(ipc) {
ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
NSLog(@"retain count of IPC is takephoto %d", [ipc retainCount]);
[self presentModalViewController:ipc animated:YES];
NSLog(@"retain count of IPC is %d", [ipc retainCount]);
} else {
VSCore *vsCore = [[VSCore alloc]init];
[vsCore MessageBox:@"Device does not support taking photos"withTitle:kInfoEN];
[vsCore release]; // written on april 14th 2013
}
}
我正在尝试追踪 ipc 对象的保留计数,所以我将 NSlog 放在某些地方。一旦我设置了委托,(ipc.delegate = self);UIImagePickercontroller 的代表将被调用,其中之一是
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ }
在这里处理图像后,我正在打印 ipc 的保留计数,结果为 5,imagepickerdelegate 正在内部增加 ipc 的保留计数,但我只创建了一次 ipc 对象。根据此链接http://www.markj.net/iphone-memory-management-tutorial-video/。释放的数量应该等于保留计数。如果我不止一次调用释放,我将收到发送到已释放实例的消息。但保留 IPC 的数量仍然是 5。任何人都可以帮我解决这个问题。谢谢,
我在另一个类中发布 Ipc,我已将 ipc 声明为单吨类中的属性,我正在像这样发布 ipc...
[[[VVideoDevice getInstance] ipc ] release];
ipc 是 vvideodevice 类中的一个属性。