亲爱的stackoverflow人,
就像上次一样,我特此提出一个我最近偶然发现的问题.我希望那里的某个人可以对我有所了解.
每当我尝试下载一个大文件的背后UIScrollView,MPMapView或者什么的,下载过程被当我触摸iPhone屏幕停止.值得庆幸的是,Jörn的一篇很棒的博客文章提出了一个替代选项,NSRunLoopCommonModes用于连接.
这让我看看两个模式的细节,NSDefaultRunLoopMode和NSRunLoopCommonModes,但苹果文档并没有好好解释,除了说
NSDefaultRunLoopMode
处理NSConnection对象以外的输入源的模式.这是最常用的运行循环模式.
NSRunLoopCommonModes
使用此值作为模式添加到运行循环的对象由已声明为"常用"模式集的成员的所有运行循环模式监视;有关详细信息,请参阅CFRunLoopAddCommonMode的说明.
CFRunLoopAddCommonMode
源,定时器和观察器被注册到一个或多个运行循环模式,并且仅在运行循环以其中一种模式运行时运行.常用模式是一组运行循环模式,您可以为其定义这些模式共享的一组源,定时器和观察器.例如,不是将源注册到每个特定的运行循环模式,而是可以将其注册到运行循环的公共伪模式,并且它将在共模模式集中的每个运行循环模式中自动注册.同样,当将模式添加到该组共用模式时,已经注册到公共伪模式的任何源,定时器或观察者被添加到新添加的共模.
有谁能用人类语言解释这两个?
我怎么能每分钟运行一个功能?在JavaScript中我可以做类似的事情setInterval,在Swift中存在类似的东西吗?
通缉输出:
你好世界每分钟一次......
SO上有一些类似的问题(最后的链接),但是没有一个能让我解决我的问题,所以这里有:
我正在使用OpenGL渲染来制作图像平铺和缓存库以供在游戏项目中使用,我想劫持UIScrollView的物理特性以允许用户在图像周围导航(因为它有很好的反弹行为,可能是好好利用它).所以我有一个UIScrollView,我用它来获取纹理的渲染视图,但是有一个问题 - 在滚动视图上移动会阻止CADisplayLink触发,直到用户完成滚动(这看起来很糟糕).一个临时修复是使用NSRunLoopCommonModes而不是默认的运行模式,但不幸的是,这打破了我正在测试的某些手机上的滚动视图行为的某些方面(3GS和模拟器似乎工作正常,而iPhone4和3G没有"T).
有谁知道如何解决CADisplayLink和UIScrollView之间的这种冲突,或者知道如何修复在其他运行模式下工作的UIScrollView?提前致谢 :)
承诺链接到类似的问题: UIScrollView损坏并停止使用OpenGL渲染滚动(相关的CADisplayLink,NSRunLoop)
我一直在搜索关于应用程序状态和Grand Central Dispatch的Apple文档,但我没有找到这个问题的好答案.
根据Apple的文档,在iOS 4.0上:
应用程序在后台但不执行代码.系统会在适当的时间自动将应用程序移动到此状态.暂停时,应用程序基本上在其当前状态下冻干,并且不执行任何代码.在内存不足的情况下,系统可能会清除已暂停的应用程序,恕不另行通知,以便为前台应用程序腾出更多空
因此,假设系统没有清除挂起的应用程序(挂起 - >未运行转换),当前在调度队列中执行的任务会发生什么?短语"基本上冻干"还有很多不足之处 - 究竟什么是冷冻干燥的?
我的解释是当应用程序转换回活动状态时,应用程序在暂停时使用的GCD队列需要恢复; 根据这种解释,暂停前GCD队列中存在的任务将消失.我的解释是否正确?
我有一个CAEAGLLayer支持的视图,它位于UIScrollView中.当我开始滚动时,调用openGL视图的-draw方法的CADisplayLink停止被调用.
我确认滚动时不会调用我的runloop启动/停止方法.一旦滚动开始,-draw方法就不会被调用,并且一旦滚动结束就恢复调用.
滚动开始后,UIKit是否会停止触发CADisplayLink?
显示链接被添加到运行循环中,如下所示:
[dl addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
Run Code Online (Sandbox Code Playgroud)
也许这个运行循环模式和UIScrollView存在冲突?是否存在其他运行循环模式或替代解决方案,即使在UIScrollView滚动时也能保持CADisplayLink触发?
我认为在任何应用程序中都不只有一个CADisplayLink.那是错的吗?
我在UIWebView中滚动时,弄清楚为什么NSTimer会停止,我有点麻烦.请看下面的代码(我知道这不是一个家庭作业网站,但老实说我卡住了):
- (void)viewDidLoad {
[super viewDidLoad];
NSString *address = @"http://en.m.wikipedia.org/wiki/";
NSURL *url = [NSURL URLWithString:address];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[wiki loadRequest:request];
time = 0;
countValue = 0;
timer = [NSTimer scheduledTimerWithTimeInterval: 0.1 target: self selector: @selector(updateTimer) userInfo: nil repeats: YES];
timeRand = 0;
countValueRand = 1;
randomTimer = [NSTimer scheduledTimerWithTimeInterval: 0.1 target: self selector: @selector(updateRandomTimer) userInfo: nil repeats: YES];
[self generateWordsArray];
}
Run Code Online (Sandbox Code Playgroud) ios ×4
iphone ×3
opengl-es ×2
caeagllayer ×1
cocoa-touch ×1
intervals ×1
nsrunloop ×1
nstimer ×1
objective-c ×1
repeat ×1
setinterval ×1
swift ×1
uikit ×1
uiwebview ×1