ios – NSOperation阻止UI绘画?

ios – NSOperation阻止UI绘画?,第1张

概述关于使用NSOperation和绘图,我有一些建议: 我有一个主线程创建我的NSOperation子类,然后将其添加到NSOperationQueue. 我的NSOperation做了一些重要的处理,它的目的是在其main()方法中循环几分钟,不断地处理一些工作,但是现在我只需要一个while()循环,里面有一个sleep(1),设置为大约只有5次(用于测试). 产生此NSOperation的主( 关于使用NSOperation和绘图,我有一些建议:

我有一个主线程创建我的NSOperation子类,然后将其添加到NSOperationQueue.

我的NSOperation做了一些重要的处理,它的目的是在其main()方法中循环几分钟,不断地处理一些工作,但是现在我只需要一个while()循环,里面有一个sleep(1),设置为大约只有5次(用于测试).

产生此NSOperation的主(原始)线程负责绘制视图并更新UI.

我打算让NSOperation线程使用一个通知告诉主线程它已经做了一些处理,在这个通知每次通过它的while()循环发送一次的时候(也就是一次一次,因为这只是睡觉(1)).主线程(视图),注册接收这些通知.

通知立即进入主线程,看起来异步,看起来很好.看来,两个线程按预期运行,即同时运行. (我使用NSLog()只是大概检查每个线程何时发送和接收通知).

当视图接收到一个通知,并且调用它的handler方法时,我只需要增加一个整数变量,然后尝试将其绘制到视图(当然是一个字符串).在测试中,drawRect中的代码将这个整数(作为一个字符串)绘制到屏幕上.

但是,这是我的问题(抱歉有一段时间到达这里):当主线程(视图)从NSOperation收到通知时,它会更新此测试整数并调用[self setNeedsdisplay].但是,在NSOperation完成之前,该视图不会重新绘制!我预计作为一个单独的线程的NSOperation将无法阻止主线程的事件循环,但似乎这正在发生.当NSOperation完成并且其main()返回时,视图终于直接重绘.

也许我没有正确使用NSOperation.我在“非同时”模式下使用它,但是尽管我的理解是,这仍然产生一个新的线程并允许异步处理.

任何帮助或建议非常感激,如果你想看到一些代码让我知道.

解决方法 在主线程上没有执行响应于您的通知执行的观察器中的方法.

因此,在该方法中,您可以使用performSelectorOnMainThread:withObject:waitUntilDone:强制另一个方法在主线程上运行.

例如:

MyOperation.m

- (voID)main {    for (int i = 1; i <= 5; i++) {        sleep(1);        [[NSNotificationCenter defaultCenter] postNotificationname:@"GTCNotification" object:[NSNumber numberWithInteger:i]];    }}

MyVIEwController.m

- (voID)setupOperation {    [[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(myNotificationResponse:) name:@"GTCNotification" object:nil];    NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];    MyOperation *myOp = [[MyOperation alloc] init];    [opQueue addOperation:myOp];    [myOp release];    [opQueue release];}- (voID)myNotificationResponse:(NSNotification*)note {    NSNumber *count = [note object];    [self performSelectorOnMainThread:@selector(updateVIEw:) withObject:count waitUntilDone:YES];}- (voID)updateVIEw:(NSNumber*)count {    countLabel.text = count.stringValue;}
总结

以上是内存溢出为你收集整理的ios – NSOperation阻止UI绘画?全部内容,希望文章能够帮你解决ios – NSOperation阻止UI绘画?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1110197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存