- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
一个快速的概念性问题,
如果我正在使用 UIImagePickerController,并且我没有实现 didFinishPickingMediaWithInfo,或者在“拍摄”图片后尝试处理返回的 UIImage,那么在委托(delegate)调用期间本应返回的 UIImage 数据会发生什么情况,是吗?刚被系统释放?
经过测试,它似乎没有泄漏或被添加到标准照片库中。
谢谢,
最佳答案
一开始我不明白为什么它会泄漏。
您一定认为 Apple 开发人员编写的代码已经确保在委托(delegate)调用完成后释放相机拍摄的图像。例如,让我们假装这就是开发人员的样子(ARC 之前,向您展示您甚至不需要 ARC 就可以拥有它)。
- (IBAction)userDidPressAccept:(id)sender
{
// Obtain image from wherever it came from, this image will start with
// Retain Count: 1
UIImage *image = [[UIImage alloc] init];
// Build an NSDictionary, and add the image in
// Image Retain Count: 2
NSDictionary *userInfo = [[NSDictionary alloc] initWithObjectsAndKeys:image, UIImagePickerControllerOriginalImage, ..., nil];
// Now the dictionary has ownership of the image, we can safely release it
// Image Retain Count: 1
[image release];
if ([self.delegate respondsToSelector:@selector(imagePickerController:didFinishPickingMediaWithInfo:)])
{
// Guy sees what he does with his image
// Image Retain Count: X (Depends on the user)
[self.delegate imagePickerController:self didFinishPickingMediaWithInfo:image];
}
// Ok, we're done. Dictionary gets released, and it can no longer own the image
// Image Retain Count: X-1 (Depends on the user)
[userInfo release];
}
在示例中,如果用户没有retain
图像(或者甚至没有实现该方法),那么X将为1,当它到达最终的release
,图像将永远消失。如果用户确实保留了该图像,那么该图像将继续存在,但支持它的字典可以得到 dealloc
化。
这是引用计数自带的“所有权”的基本概念,它就像一个玻璃球,需要用手去传递,如果下面没有手,它就会掉下来摔碎。
ARC 有点通过自己来掩盖所有这些,但基本概念仍然存在,所有权转移到委托(delegate)的实现,如果没有委托(delegate)声明它,它将被删除。
关于iphone - UIImagePickerController, didFinishPickingMediaWithInfo 没有实现的时候,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17740058/
我在我的应用程序中使用 UIImagePickerViewController 拍照,但是在支持多任务处理的 iOS4+ 中,我遇到了内存问题。如果您打开了很多应用程序,然后又打开了我的应用程序,则
我正在努力使用 捕获 4.0 中返回的图像 - (void)imagePickerController:(UIImagePickerController *)picker didFinishP
我基本上是在尝试从用户照片库(或相机)中“获取”图像。 问题是,在 iPad 上(兼容模式)时没有返回图像。 这是代码: - (void)imagePickerController:(UIImageP
我想知道是否有办法让 didFinishPickingMediaWithInfo 方法根据发件人执行不同的操作。 例如: 在一个ViewController中,我有一个相机按钮,当用户完成拍照时,di
我认为 UIImagePickerController 委托(delegate)方法(或任何 UIKit 委托(delegate)方法)在主线程中被调用。但是在这里,当从图库或相机中选取图像时,did
我正在尝试在imagePickerController:didFinishPickingMediaWithInfo中管理图像旋转,但经过多次尝试,我没有找到任何解决方案。我最后的尝试是: -(void
我正在将旋转轮按钮实现为我的相机中的录制按钮。但是在单击旋转 DidFinish 方法的中心按钮时没有调用。 旋转轮的使用来自 http://www.raywenderlich.com/9864/ho
它看起来像 didFinishPickingMediaWithInfo 函数正在进行无限循环,它最终崩溃并在控制台中显示错误: warning: could not execute support c
Bellow 是我的 didFinishPickingMediaWithInfo 方法,我知道我有很多不必要的代码,保留,发布等......但这是我可以让它工作的方式,我害怕在尝试时破坏它优化它。 谁
我有一个 UITableViewCell 按钮可以拍摄图像并将其放回单元格中。当我调用 UIImagePickerController 并拍摄图像时,它不会调用以下委托(delegate): func
我在使用 UIImagePickerController 时遇到问题。基本上,虽然选择器显示良好,但 UIImagePickerController didFinishPickingMediaWith
我有一个 View Controller ,它需要能够从相册和相机中选择图片。对于 didFinishPickingMediaWithInfo 我只能有 1 个委托(delegate)方法,虽然我可以
我有一个项目,其中有许多使用 imagePicker 的 View Controller 。每次,我都必须再次复制 didFinishPickingMediaWithInfo 并且只更改一些代码。 然
我有带有cameraOverlyView的UIImagePickerController。我向覆盖 View 添加了点击手势识别器 - 当用户点击 View 时,应停止并保存录制: let media
在我的应用程序上拍摄照片后,我试图关闭预览。我只想按下快门按钮,然后弹回显示 UIImagePickerController 的 UIViewController,而不显示图像预览以及“重拍”和“使用
我有一个简单的应用程序,您可以从照片库中选择现有视频,也可以使用 UIImagePickerController 拍摄视频。 我添加了以下代码,当我用相机制作新视频时,如果将来需要,我可以将它保存在照
关闭。这个问题需要debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
这似乎是一个简单的问题,我已经看到类似问题的答案,但答案不起作用(至少不再起作用)。我在 viewDidAppear 中有以下代码: UIImagePickerController *imagePic
我不断收到未使用的变量警告。我正在尝试显示模态视图,用户在其中选择一张照片,我想在 UIImageView 中使用所选图像。 不确定这些信息是否足够,但非常感谢任何帮助。 - (IBAction) b
我有一个带有四个选项卡的 tabBar 应用程序。每个选项卡在每个选项卡 View 的 UINavigationBar 左侧都有一个相机按钮。单击相机按钮,进入相机模式,拍照,最后选择“使用照片”后,
我是一名优秀的程序员,十分优秀!