您的位置:首页 > 产品设计 > UI/UE

NSUrlConnection, 下载文件时当你滑动UItableView或UIscrollView时,如何避免阻塞。

2014-03-11 13:44 295 查看
原文链接:http://www.pixeldock.com/blog/how-to-avoid-blocked-downloads-during-scrolling/

当你的app在现在文件时(像一个大图片),你不希望在下载期间阻塞用户界面。最常想到的办法是异步下载大文件。

最简单的后台下载文件的方法是通过NSUrlConnection.

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate: self  startImmediately:NO];
[connection start];

但是如果你使用connection object 的默认设置将会在NSDefaultRunLoopMode模式下执行

也就是connection只会当app的runloop是NSDefaultRunLoopMode时执行请求。

此时当用户touch屏幕(像scrollview),运行循环将会转换NSEventTrackingRunLoopMode

模式下。这个时候,运行循环不再是NSDefaultRunLoopMode模式,connection将不会执

行请求,造成的坏的影响也就是当用户滚从屏幕时候下载将会阻塞。用户滚动列表可能会

持续较长的时间,下载将会暂停直到滚动完全结束,当用户继续滚动列表,下载将会再次

阻塞。

l幸运的是解决这个问题很简单:你可以在另一种模式下执行connection。当你在NSRunLoopCommonModes模式下执行connection,它将会在runloop所有模式下执行而不仅仅在NSEventTrackingRunLoopMode模式下(当用户滚动屏幕的时候)。

[connection scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSRunLoopCommonModes];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络