当UIView移动时阻止线程冻结

时间:2012-08-14 23:12:11

标签: objective-c multithreading objective-c-blocks nsoperation nsoperationqueue

所有都是标题:) 我有这个方法:

[[NetworkManager sharedInstance] getContentFromUrl:url withId:@"json" onResultBlock:^(NSData *data, NSString *identifier) {
            NSLog(@"done")
    } onFailureBlock:^(NSError *error, NSString *identifier) {
        NSLog(@"error");
    }];

在我的应用程序中,我有一个包含50个单元格的桌面视图。 当我运行我的应用程序并用手指移动tableview时,不会显示“完成”消息。所以,下一个下载没有开始:( 但当我在tableview上放开手指时,会出现“完成”消息......

信息: 方法getContentFromUrl实例化由NSOperation子类化的对象。在这个对象中,我使用NSURLConnection initWithRequest:delegate获取内容: 然后,在NSOperationQueue中添加对象。

获答答案:)

1 个答案:

答案 0 :(得分:0)

您的NetworkManager类正在默认运行循环模式下在主线程上调度异步NSURLConnection对象。当您的手指向下时,运行循环将被置于NSEventTrackingRunLoopMode模式。这将暂停连接。

应修改

NetworkManager以使用NSRunLoopCommonModes显式安排连接。这包括默认模式和事件跟踪模式。