首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSInvocationOperation问题

NSInvocationOperation问题
EN

Stack Overflow用户
提问于 2011-02-12 13:24:52
回答 2查看 678关注 0票数 0

我的Cocoa Mac应用程序中有一个方法,它在应用程序的PubSub客户机中遍历所有订阅的提要,并将所有条目标记为已读。

逻辑是这样的.

代码语言:javascript
复制
NSArray *feeds = [[PSClient applicationClient]feeds];

for(PSFeed *feed in feeds)
{
    for(PSEntry *entry in [feed entries])
    {
        entry.read = NO;
    }
}

如果有大量未读的提要,可能需要一段时间才能浏览完所有提要(相对而言)。我希望用户能够做其他事情,如滚动通过文章,而其他的东西是在后台进行。因此,我有一个NSInvocationOperation设置来调用该方法,如下所示...

代码语言:javascript
复制
NSInvocationOperation *opr = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(markAllReadOperation) object:nil];
[que addOperation:opr];
[opr release];

当循环运行时,应用程序仍然会经历严重的减速。并且UI几乎没有响应。我是不是遗漏了NSInvocationOperation的某些东西,或者我的逻辑本身就很慢?

EN

回答 2

Stack Overflow用户

发布于 2011-02-12 14:35:01

这听起来像是for...Grand中央调度的工作!

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        [obj enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            [obj setRead:NO];
        }];
    }];
});

当然,中央调度中心(和块)都是在MacOSX10.6中引入的,所以如果你需要支持旧版本的OS,那么它可能无法使用。

票数 0
EN

Stack Overflow用户

发布于 2011-02-12 21:16:30

如果你的UI没有响应,那么它听起来像是有什么东西在主线程上运行。你不是在用mainQueue吧?

我认为最好的办法是使用Instruments使用Time Profiler工具来查看到底是什么代码导致了速度减慢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4976513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档