相关疑难解决方法(0)

NSDefaultRunLoopMode与NSRunLoopCommonModes

亲爱的stackoverflow人,

就像上次一样,我特此提出一个我最近偶然发现的问题.我希望那里的某个人可以对我有所了解.

每当我尝试下载一个大文件的背后UIScrollView,MPMapView或者什么的,下载过程被当我触摸iPhone屏幕停止.值得庆幸的是,Jörn的一篇很棒的博客文章提出了一个替代选项,NSRunLoopCommonModes用于连接.

这让我看看两个模式的细节,NSDefaultRunLoopMode和NSRunLoopCommonModes,但苹果文档并没有好好解释,除了说

NSDefaultRunLoopMode

处理NSConnection对象以外的输入源的模式.这是最常用的运行循环模式.

NSRunLoopCommonModes

使用此值作为模式添加到运行循环的对象由已声明为"常用"模式集的成员的所有运行循环模式监视;有关详细信息,请参阅CFRunLoopAddCommonMode的说明.

CFRunLoopAddCommonMode

源,定时器和观察器被注册到一个或多个运行循环模式,并且仅在运行循环以其中一种模式运行时运行.常用模式是一组运行循环模式,您可以为其定义这些模式共享的一组源,定时器和观察器.例如,不是将源注册到每个特定的运行循环模式,而是可以将其注册到运行循环的公共伪模式,并且它将在共模模式集中的每个运行循环模式中自动注册.同样,当将模式添加到该组共用模式时,已经注册到公共伪模式的任何源,定时器或观察者被添加到新添加的共模.

有谁能用人类语言解释这两个?

iphone multithreading nsrunloop ios

105
推荐指数
1
解决办法
3万
查看次数

在Swift中每隔x分钟做一些事情

我怎么能每分钟运行一个功能?在JavaScript中我可以做类似的事情setInterval,在Swift中存在类似的东西吗?

通缉输出:

你好世界每分钟一次......

repeat intervals setinterval ios swift

102
推荐指数
6
解决办法
8万
查看次数

CADisplayLink OpenGL渲染会破坏UIScrollView行为

SO上有一些类似的问题(最后的链接),但是没有一个能让我解决我的问题,所以这里有:

我正在使用OpenGL渲染来制作图像平铺和缓存库以供在游戏项目中使用,我想劫持UIScrollView的物理特性以允许用户在图像周围导航(因为它有很好的反弹行为,可能是好好利用它).所以我有一个UIScrollView,我用它来获取纹理的渲染视图,但是有一个问题 - 在滚动视图上移动会阻止CADisplayLink触发,直到用户完成滚动(这看起来很糟糕).一个临时修复是使用NSRunLoopCommonModes而不是默认的运行模式,但不幸的是,这打破了我正在测试的某些手机上的滚动视图行为的某些方面(3GS和模拟器似乎工作正常,而iPhone4和3G没有"T).

有谁知道如何解决CADisplayLink和UIScrollView之间的这种冲突,或者知道如何修复在其他运行模式下工作的UIScrollView?提前致谢 :)

承诺链接到类似的问题: UIScrollView损坏并停止使用OpenGL渲染滚动(相关的CADisplayLink,NSRunLoop)

在iPhone上拖动UIScrollView时,OpenGL ES视图中的动画会冻结

iphone opengl-es

24
推荐指数
1
解决办法
1万
查看次数

当应用程序在iOS中进入非活动/后台/暂停状态时,调度队列中的任务会发生什么?

我一直在搜索关于应用程序状态和Grand Central Dispatch的Apple文档,但我没有找到这个问题的好答案.

根据Apple的文档,在iOS 4.0上:

应用程序在后台但不执行代码.系统会在适当的时间自动将应用程序移动到此状态.暂停时,应用程序基本上在其当前状态下冻干,并且不执行任何代码.在内存不足的情况下,系统可能会清除已暂停的应用程序,恕不另行通知,以便为前台应用程序腾出更多空

因此,假设系统没有清除挂起的应用程序(挂起 - >未运行转换),当前在调度队列中执行的任务会发生什么?短语"基本上冻干"还有很多不足之处 - 究竟什么是冷冻干燥的?

我的解释是当应用程序转换回活动状态时,应用程序在暂停时使用的GCD队列需要恢复; 根据这种解释,暂停前GCD队列中存在的任务将消失.我的解释是否正确?

objective-c grand-central-dispatch ios

19
推荐指数
1
解决办法
3483
查看次数

为什么UIScrollView会暂停我的CADisplayLink?

我有一个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.那是错的吗?

opengl-es uikit ios cadisplaylink caeagllayer

14
推荐指数
1
解决办法
2543
查看次数

为什么在UIWebView iPhone中滚动时计时器停止?

可能重复:
UIScrollView暂停NSTimer直到滚动完成

我在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)

iphone cocoa-touch uiwebview nstimer

6
推荐指数
1
解决办法
2274
查看次数