博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSRunLoop
阅读量:6852 次
发布时间:2019-06-26

本文共 1993 字,大约阅读时间需要 6 分钟。

一、类定义

  + (NSRunLoop *)currentRunLoop

    如果调用的线程中没有runloop,那么将会创建一个并返回
  + (NSRunLoop *)mainRunLoop
    返回主线程的runloop

  - (void)acceptInputForMode:(NSString *)mode beforeDate:(NSDate *)limitDate

    运行loop一次或者直到limitDate。如果没有input sources加入到这个loop,那么马上返回;否则一直运行到limitDate,或者接口到一个input source然后返回。
  - (void)addPort:(NSPort *)aPort forMode:(NSString *)mode
  - (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode
    port和timer都可以添加到多个mode中
  - (void)cancelPerformSelector:(SEL)aSelector target:(id)target argument:(id)anArgument
    取消所有mode中的perform select,argument必须跟指定调用时候的一样
  - (void)cancelPerformSelectorsWithTarget:(id)target
  - (NSString *)currentMode
    如果run loop没有运行,那么返回nil
  - (CFRunLoopRef)getCFRunLoop
  - (NSDate *)limitDateForMode:(NSString *)mode
    下一次运行的时间,如果没有指定的mode上没有input source,返回nil
  - (void)performSelector:(SEL)aSelector target:(id)target argument:(id)anArgument order:(NSUInteger)order modes:(NSArray *)modes
order值越低优先级越高
  - (void)removePort:(NSPort *)aPort forMode:(NSString *)mode
  - (void)run
    在default mode下无限运行loop,但是如果没有任何input source,会立即返回。手动移除所有已知的inout source并不能保证run loop停止运行,因为系统可能会添加一些input source。
  - (BOOL)runMode:(NSString *)mode beforeDate:(NSDate *)limitDate
    运行input source一次,为指定mode的input阻塞直到date的时间。如过没有input source,立即返回并返回NO。
  - (void)runUntilDate:(NSDate *)limitDate
  如果没有input source,立即返回。否则在limitDate到来之前,不停的循环。

二、RunLoopMode

NSDefaultRunLoopMode 这是大多数操作中使用的模式。
NSConnectionReplyMode 该模式用来监控NSConnection对象。你通常不需要在你的代码中使用该模式。
NSModalPanelRunLoopMode Cocoa使用该模式来标识用于modal panel(模态面板)的事件。
NSEventTracking(UITrackingRunLoopMode) Cocoa使用该模式来处理用户界面相关的事件。
NSRunLoopCommonModes 这是一组可配置的通用模式。将input sources与该模式关联则同时也将input sources与该组中的其它模式进行了关联。对于Cocoa应用,该模式缺省的包含了default,modal以及event tracking模式。

  一个常见的问题就是,主线程中一个NSTimer添加在default mode中,当界面上有一些scroll view的滚动频繁发生导致run loop运行在UItraking mode中,从而这个timer没能如期望那般的运行。所以,我们就可以把这个timer加到NSRunLoopCommonModes中来解决。

转载于:https://www.cnblogs.com/huxuesen/archive/2013/03/12/2955992.html

你可能感兴趣的文章
Centos 6.4下用Squid配置反向代理多个内网WEB服务器
查看>>
王者荣耀之父姚晓光“奇葩”的工作理念
查看>>
Flask 信号
查看>>
Extjs checkbox数值回显
查看>>
SpringBatch配置数据库
查看>>
SVN使用svn+ssh协议连接服务器时重复提示输入密码 解决办法
查看>>
微信公众平台开发(107) 分享到朋友圈和发送给好友
查看>>
GeoTiff如何存储颜色表的研究
查看>>
HTTP请求GET/POST查看工具
查看>>
php实现 坐标移动
查看>>
前端之HTML
查看>>
The Cats' Feeding Spots
查看>>
Python 进阶_OOP 面向对象编程_self 的实例绑定
查看>>
jquery内核学习(5)--对象的遍历
查看>>
在Android迷你广告上添加浮动的关闭按钮
查看>>
2dcontext
查看>>
企业级大数据处理方案-01
查看>>
计算机的组成与操作系统
查看>>
包冲突getJspApplicationContext
查看>>
Webrtc入门——基于阿里云ubuntu 最新webrtc Android平台编译详细说明
查看>>