gpt4 book ai didi

iphone - 使用 performSelectorOnMainThread 调用非 void 函数

转载 作者:可可西里 更新时间:2023-11-01 05:14:58 25 4
gpt4 key购买 nike

正如我问题的标题所述..我尝试使用 performSelectorOnMainThread 调用非 void 函数 ..当我调用它时,我的函数返回 UIImage像这样:

UImage *img = [self performSelectorOnMainThread:@selector(captureScreen:) withObject:webView waitUntilDone:YES];

它给我一个错误,我有不兼容的分配类型,我也尝试像这样转换它

UImage *img = (UIImage*)[self performSelectorOnMainThread:@selector(captureScreen:) withObject:webView waitUntilDone:YES];

我得到了语义问题:需要算术或指针类型的“void”类型的操作数

我知道我可以正常调用它,但我正在尝试一些多线程的东西并且需要它像这样调用..那么我该如何防止这个错误?

编辑:

我尝试在这个函数 (captureScreen) 中使用 GCD,它一直在“viewToCapture”上进行 Exc_bad_access .. 所以我决定在 GCD block 中调用父函数

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);

dispatch_async(queue, ^{
[self captureScreenDelayed:pageView];

dispatch_sync(dispatch_get_main_queue(), ^{
});
});

和“captureScreenDelayed:”如下

- (void) captureScreenDelayed:(EpubPageViewController*)pageView
{
if(!pageView)
pageView = [self currentPageView];

if(pageView.pageImageView)
pageView.pageImageView.image = (UIImage*)[self performSelectorOnMainThread:@selector(captureScreen:) withObject:webView waitUntilDone:YES];
}

captureScreen:

-(UIImage*)captureScreen:(UIView*) viewToCapture
{

UIGraphicsBeginImageContextWithOptions(viewToCapture.bounds.size, viewToCapture.opaque, 0.0);
[viewToCapture.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}

老实说,我不确定这是否是在单独的线程中获取图像的正确方法...我感谢任何建议。

最佳答案

这里你必须记住的是,你实际上调用的方法是-performSelectorOnMainThread:withObject:waitUntilDone:,它有一个(void ) 返回类型。因此,您无法获得通过该方法返回的执行选择器的结果。如果你需要做这种类型的多线程,你应该查看 concurrency programming guide并且,特别是 grand central dispatch .

关于iphone - 使用 performSelectorOnMainThread 调用非 void 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10399235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com