问题标签 [nsrunloop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - iOS UIScrollView 被 NSRunLoopCommonModes 卡住且无响应
在我的 iPhone 应用程序中,我使用 3rd 方库 (libPusher) 进行 WebSockets 网络,并且该库导致我的应用程序中的每个 UIScrollView 组件都变得无响应。这包括 UIScrollViews 和 UITableView。
发生的情况是,如果用户用手指滚动其中一个 UIScrollView 组件,并且碰巧在网络操作正在进行的同时用手指继续触摸和滑动视图,那么这会导致 UIScrollView 完全无响应并停止接受触摸事件(即使手指抬起,它也认为它一直处于拖动模式)并且没有适当地减速。唯一的出路是销毁 UIScrollView 并重新创建一个新的。
我已经联系了图书馆的开发人员,但不幸的是到目前为止还没有收到回复。
根据我的阅读,这是在不适当的模式下运行运行循环时的常见问题,例如NSDefaultRunLoopMode
,但是这个库似乎在做正确的事情并且它运行它的运行循环NSRunLoopCommonModes
所以我不清楚正确的解决方案是。
我尝试使用不同的模式(尝试过NSDefaultRunLoopMode
),但行为是相同的。
我正在使用 iOS 5,它在模拟器和设备上的行为相同。
让我将我认为有问题的代码粘贴到库中,希望这足以让您帮助我找到解决方案。
在 NSOperation 的子类中,我们有:
此操作在主线程上运行,如[[NSOperationQueue mainQueue] addOperation:authOperation];
. (也许这就是问题所在,但我尝试在另一个线程中运行它并且它崩溃了,所以库需要更多的工作才能使其后台线程安全,所以我还不能证明这是解决方案......)
到目前为止我试过
- 将运行循环模式更改为
NSDefaultRunLoopMode
- 没有帮助。 - 在我创建的新操作队列中运行操作(例如,不在主线程上),但库似乎还没有准备好,因为它崩溃了。
我仍然觉得我在黑暗中射击......帮助:)
谢谢!
iphone - 停止在后台线程中执行动画并运行循环
我在 UITTableViewCell 中运行我的动画。每个单元格都有自己的动画,并且单元格是可重复使用的。我用[mView performSelectorInBackground:@selector(layoutSubview) withObject:nil];
在后台线程中,我启动 runLoop 以执行如下任务:
并停止它:
当我快速滚动表格时遇到问题,因为在第一个单元格启动时我开始动画,所以第一个 runLoop 调用发生,它执行 setNeedDisplay 和它的所有方法。但是在完成第一个 runLoop 循环之前,单元格从视图中消失并且已经可以重用了。所以我开始清除它,而循环仍在执行操作,在这里我遇到了这样的情况
发送到已释放实例的消息
那么您能否给我一些提示,说明我应该如何正确停止在该线程中执行操作?我的意思是,如果我想了解例如一个正在执行某些操作的对象,如何立即停止它们?
希望我提供了足够的信息。谢谢
更新:完全没有想法?
macos - CFRunLoopRun() 与 [NSRunLoop 运行]
我有一个 NSRunLoop 对象,我将计时器和流附加到该对象。它工作得很好。停止它是另一个故事。
我使用[runLoop run]
.
如果我尝试使用 停止循环CRunLoopStop([[NSRunLoop currentRunLoop] getCFRunLoop])
,则循环不会停止。如果我改为使用开始循环CRunLoopRun()
,它会起作用。我还确保调用是在正确的线程(运行我的自定义运行循环的线程)上进行的。我已经用pthread_self()
.
CRunLoopStop()
我找到了一个邮件列表存档,其中一位开发人员说“如果您使用 run 方法启动循环,请不要打扰使用NSRunLoop
”。我可以理解为什么会这样——你通常将初始化器和终结器从同一组函数中配对。
你如何阻止一个NSRunLoop
没有“诉诸CF”的人?我没有stop
在NSRunLoop
. 文档说您可以通过三种方式停止运行循环:
- 配置运行循环以使用超时值运行
- 告诉运行循环停止使用
CFRunLoopStop()
- 移除所有输入源,但这是停止运行循环的一种不可靠的方法,因为你永远无法知道是什么东西卡在了你背后的运行循环中
好吧,我已经尝试了 2。它有一种“丑陋”的感觉,因为你必须深入研究 CF。3. 不可能——我不喜欢非确定性代码。
这给我们留下了 1。如果我正确理解了这些文档,您就不能将超时“添加”到已经存在的运行循环中。您只能在超时的情况下运行新的运行循环。如果我运行一个新的运行循环,它不会解决我的问题,因为它只会创建一个嵌套的运行循环。我还是会回到旧的,我想停下来……对吧?我可能误解了这一点。另外,我不想使用超时值运行循环。如果我这样做了,我将不得不在消耗 CPU 周期(低超时值)和响应能力(高超时值)之间进行权衡。
这是我现在的设置(伪代码):
通讯器.h
Communicator.m
我是什么做的?弄乱 CF 是常见的/好的模式吗?我对基金会不够了解。干扰 CF 层是否可能是危险的(关于内存损坏、不一致、内存泄漏)?是否有更好的模式来实现我想要实现的目标?
iphone - 使用 NSRunLoop
我在 viewDidLoad 中运行 2 个方法,在它们之间运行 NSRunLoop 10 秒
这里图像没有改变,黑屏,10 秒后我只看到 [恐怖] 的结果。另一方面,当我在 viewDidLoad 中只保留 [nextImage] 图像更改时,我认为我的 NSRunLoop 出了点问题
iphone - NSRunLoop 和 NSAutoreleasePool,它们是如何交互的?
自动释放池将在运行循环结束时释放。
这是否意味着任何循环迭代的结束?这什么时候发生?
在处理完每个触摸、动作或远程控制事件后,池将被清空。
如果我们的应用程序不提供任何触摸怎么办?
如果我们使用这样的代码,我们如何确定对象在
[self someObject]
和retain
之间没有被释放someMethod
?
ios5 - RunLoop 中的 CADisplayLink 未调用回调
我有以下代码应该使每一帧都调用drawFrame,但它没有:
displayLink 是指向 CADisplayLink 的指针。在我看来,它们连接到一个标签。此视图连接到 viewReference。self 是 ViewController。声明了drawFrame
当我在 viewDidLoad 中测试时,可以设置 thel.text。
似乎 drawFrame 从未被调用过。该应用程序基于带有自定义故事板文件的 Xcode 4.2 空应用程序模板(我后来添加了它,而不是选择在创建时使用故事板)。除了视图控制器、视图和标签之外,它是空的。
我是新手。当调用 [[NSRunLoop currentRunLoop] run] iOS 5.0 Simulator 根本不显示应用程序。currentRunLoop 无论如何都应该是默认的主 runLoop。
ios - iOS:如果我的应用程序进入非活动状态,待处理的延迟执行选择器请求会发生什么情况?
我的预感是,执行选择器以 afterDelay 值 > 0.0 开始,并且在应用程序进入后台时还有剩余时间不会在后台执行,但会在应用程序退出后台后继续运行,并且它们的时钟会减少模式。
但我的预感正确吗?
ios - 我们怎样才能停止线程
我正在开发我的线程在 connectionDidFinishLoading 时启动的应用程序。
connectionDidFinishLoading 被多次调用,所以我想停止下载线程,然后再次启动它。我试图只执行最后一个线程。请帮助我在两者之间停止我的线程。
cocoa - Cocoa 的事件驱动系统:后台任务在哪里运行?
在 Mac OS X 上,Cocoa 是事件驱动的。我的意思是每件事都是由 UI 驱动的——用户单击某物或在某个区域上移动会导致调用事件处理程序。Main 只是调用 NSApplicationMain () 来创建一个无限循环,直到程序退出。
那些不是用户驱动的任务呢?我应该将需要在后台工作以提供程序基本功能的任务放在哪里?例如,当用户与 UI 交互时,Photo Booth 会执行某些操作(即当用户单击某个按钮时更改为摄像机)。但是,Photo Booth 也不断地从相机中检索帧以提供视频流。
所以我的问题是非 UI 任务代码去哪里了?Main() 是不可能的,因为我需要任务在程序的整个生命周期中运行,而不是在程序刚启动时运行。
我在 Mac OS X Snow Leopard 上(我想要一些适用于所有 Mac 系统的东西:即 Lion OS X)并且在 Xcode 中使用 Obj-C Cocoa 应用程序。