Objective-C 中的 NSThread 错误

Posted

技术标签:

【中文标题】Objective-C 中的 NSThread 错误【英文标题】:NSThread Error in Objective-C 【发布时间】:2009-11-06 09:50:20 【问题描述】:

我收到这个错误

bool _WebTryThreadLock(bool), 0x1b53d0:试图从主线程或web线程以外的线程获取web lock。这可能是从辅助线程调用 UIKit 的结果。现在崩溃了...

这是因为什么?

谢谢

【问题讨论】:

【参考方案1】:

根据您提供的有限信息,我假设您从线程创建了一个 UIView(或它的任何子类)。

尝试改用以下方法:

[self performSelectorOnMainThread:<#(SEL)aSelector#>
                       withObject:<#(id)arg#> 
                    waitUntilDone:<#(BOOL)wait#>];

== 编辑 ==

如果那是您的 appDelegate 从线程中获取回调,请尝试在您的回调之外添加一个新方法:

- (void) setMyImage:(UIImage*)theImage  
   ... 
   myUIImageView.image = theImage; 
   ...
 

并从 上面提到的线程:

- (void) callBackWithImage:(UIImage*)imageFromUrl  
    [self performSelectorOnMainThread:@selector(setMyImage:) 
                           withObject:imageFromUrl 
                        waitUntilDone:NO]; 
 

【讨论】:

在我的 viewDidLoad 方法中,我正在创建一个 UIImageView。然后我调用一个线程,它从 URL 获取图像,并在线程方法中为该 ImageView 设置图像。

以上是关于Objective-C 中的 NSThread 错误的主要内容,如果未能解决你的问题,请参考以下文章

一条 Objective-C 消息被发送到一个已释放的“NSThread”对象(僵尸),地址为:

Objective-C 多线程

《Objective-C 高级编程》干货三部曲:GCD篇

iOS —— 多线程NSThread

iOS开发Swift篇(02) NSThread线程相关简单说明

iOS并发编程对比总结,NSThread,NSOperation,GCD - iOS