【问题标题】:AVAssetImageGeneratorCompletionHandler - how to set or return variables?AVAssetImageGeneratorCompletionHandler - 如何设置或返回变量?
【发布时间】:2011-08-15 02:00:01
【问题描述】:

我正在使用 AVAssetImageGenerator 从影片剪辑中获取图像,而无需之前播放它。现在我有一个问题,如何在处理程序的循环中设置变量? 可能吗? 我收到此错误消息,不知道这是什么意思。 (谷歌>没有结果)。

"变量不可赋值(缺失 __block 类型说明符)"

所以我必须在这里问专业人士。 这是代码。我想保存或返回我生成的 imageData,所以我可以删除以下处理程序中的“setImage”消息。

UIImage* thumbImg = [[UIImage alloc] init];

AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error)
{
    if (result != AVAssetImageGeneratorSucceeded) 
    {
        NSLog(@"couldn't generate thumbnail, error:%@", error);
    }
    [button setImage:[UIImage imageWithCGImage:im] forState:UIControlStateNormal];
    thumbImg = [[UIImage  imageWithCGImage:im] retain];
    [generator release];
};

很高兴了解这一点。 感谢您的宝贵时间。

【问题讨论】:

    标签: uiimage instance-variables avassetwriter


    【解决方案1】:

    首先,您似乎不需要在声明 thumbImg 时对其进行初始化 - 在该行中创建的 UIImage 对象将在块中被覆盖并泄漏。只需用 nil 值初始化它。

    您的代码中的实际问题是您要在块中更改的变量应该使用 __block 说明符声明(如错误消息所述)。所以你的 1s 线应该是

    __block UIImage* thumbImg = nil;
    

    【讨论】:

    • 感谢您的出色回答!我可以知道在这种情况下 __block 的作用是什么吗?我记得这与保留记忆有关。
    • 以前从未听说过 __block 说明符。谢谢你的答案。你为我节省了很多时间。 :)
    猜你喜欢
    • 2021-01-16
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多