草庐IT

nsrunloop

全部标签

ios - NSRunLoop 是做什么的?

我读了很多关于NSRunLoop的帖子,比如this,this,this.但无法弄清楚NSRunLoop实际上做了什么我平时看到的是工作线程wthread=[[NSThreadalloc]initWithTarget:selfselector:@selector(threadProc)object:nil];[wthreadstart];里面有一个NSRunLoop-(void)threadProc{NSAutoreleasePool*pool1=[[NSAutoreleasePoolalloc]init];BOOLisStopped=NO;NSRunLoop*runloop=[NSR

ios - 是否可以确定与打开的 NSStream 关​​联的 NSRunLoop/NSThread?

我正在使用(并且必须使用)我没有源代码的第三方框架。第三方框架负责创建经过身份验证的客户端/服务器连接并返回一对开放的NSStreams。根据Apple的文档,流创建过程是:分配/初始化、设置委托(delegate)、在运行循环中安排和打开。Apple的文档进一步说:“您永远不应该尝试从不同于拥有流运行循环的线程访问预定流。”https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html#//apple_ref/doc/ui

ios - 在我决定停止它之前,将当前线程 NSRunLoop 设置为以某种模式运行的正确方法是什么?

我想模仿UIScrollView的行为,当您拖动scrollView时,当前线程RunLoop模式更改为UITrackingRunLoopMode,当您停止拖动时返回NSDefaultRunLoopMode。不过,我想用我自己的类来做,拖拽View...现在我正在使用这段代码while(_draggingView&&[[NSRunLoopcurrentRunLoop]runMode:UITrackingRunLoopModebeforeDate:[NSDatedistantFuture]]);当我停止拖动时,_draggingView变为nil,因此我停止在该模式下循环。有没有更优雅/

objective-c - 如何在 NSOperation 中实现 NSRunLoop

我发布这个问题是因为我看到很多关于这个主题的困惑,结果我花了几个小时调试NSOperation子类。问题是,当您执行异步方法时,NSOperation对您没有多大好处,这些方法在异步回调完成之前实际上没有完成。如果NSOperation本身是回调委托(delegate),由于回调发生在不同的线程上,它甚至可能不足以正确完成操作。假设您在主线程中,您创建了一个NSOperation并将其添加到NSOperationQueue,NSOperation中的代码会触发一个异步调用,该调用会回调AppDelegate或ViewController上的某个方法。您不能阻塞主线程,否则UI将被锁定,

ios - 需要一些关于调度队列、线程和 NSRunLoop 的说明

以下是我所知道和理解的:全局队列是一个并发队列,可以将任务分派(dispatch)给多个线程。不保证执行任务的顺序。例如:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),{for(inti;i如果我想分派(dispatch)到串行队列,我可以使用dispatch_async(dispatch_queue_create("my.serial.queue",nil){...}每次只有一个任务被分派(dispatch)到一个线程并被执行。顺序是先进先出。=====我很困惑&不完全理解===

iphone - NSTimer、NSTask、NSThread 和 NSRunloop 之间的基本区别是什么?

NSTimer、NSTask、NSThread和NSRunloop之间有什么区别,是否有关于何时执行的指南使用它们中的每一个? 最佳答案 每个程序至少在一个线程中运行。您可以将每个线程视为一个独立的程序执行进程,每个线程都与其他线程并行运行。如果您有某种用户界面或其他代码需要监听事件(如网络端口),您需要一个运行循环。每个NSThread都会自动获得自己的运行循环,你很少需要直接关心它们。运行循环还负责创建和释放自动释放池。[编辑:有关自动释放池的更多讨论,请参阅评论。要记住的最重要的一点是新线程必须负责设置自动释放池。例如,使用d

objective-c - 让 NSRunLoop 等待设置标志的最佳方法?

在NSRunLoop的Apple文档中有示例代码演示了在等待其他东西设置标志时暂停执行。BOOLshouldKeepRunning=YES;//globalNSRunLoop*theRL=[NSRunLoopcurrentRunLoop];while(shouldKeepRunning&&[theRLrunMode:NSDefaultRunLoopModebeforeDate:[NSDatedistantFuture]]);我一直在使用它并且它可以工作,但在调查性能问题时,我将其追踪到这段代码。我使用几乎完全相同的一段代码(只是标志的名称不同:),如果我在设置标志后将NSLog放在行上

iphone - 检测代码是否在 Objective-C 的主线程上运行的正确方法是什么? (iOS)

这个问题在这里已经有了答案:Checkwhetherornotthecurrentthreadisthemainthread(13个回答)关闭9年前。我的代码需要保证某个操作在主线程上运行,但是调用可能来自后台线程。为了检测后台情况,我使用了以下方法:-(void)selectorToRunInMainThread:(id)arguments{//pushtomainthreadif([NSRunLoopcurrentRunLoop]!=[NSRunLoopmainRunLoop]){[selfperformSelectorOnMainThread:@selector(selector

iphone - 检测代码是否在 Objective-C 的主线程上运行的正确方法是什么? (iOS)

这个问题在这里已经有了答案:Checkwhetherornotthecurrentthreadisthemainthread(13个回答)关闭9年前。我的代码需要保证某个操作在主线程上运行,但是调用可能来自后台线程。为了检测后台情况,我使用了以下方法:-(void)selectorToRunInMainThread:(id)arguments{//pushtomainthreadif([NSRunLoopcurrentRunLoop]!=[NSRunLoopmainRunLoop]){[selfperformSelectorOnMainThread:@selector(selector