iOS开发笔记

iOS开发之NSRunloop用法简介

2019-08-02  本文已影响0人  祥子_HelloWorld
一、类定义
+ (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

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

参考:http://bbs.9ria.com/thread-208769-1-1.html

上一篇 下一篇

猜你喜欢

热点阅读