NSRunLoop 有两个 api:

- (BOOL)runMode:(NSString *)mode beforeDate:(NSDate *)limitDate


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

我的意思是除了返回值之外它们是相同的,还是有其他差异?

最佳答案

正如@DarkDust 所暗示的那样,它曾经与计时器有关。见 Chris Kane's discussions on the Cocoa mailing list 。曾几何时,runMode:beforeDate:limitDateForMode:acceptInputForMode:beforeDate: 的包装器(因为 acceptInputForMode:beforeDate: 没有触发计时器)。我对文档、标题和崩溃堆栈的阅读表明,今天,它们的行为相同(调用 CFRunLoopRunInMode() ,它会触发计时器)。但我还没有建立一个测试应用程序来确认。

如果您阅读原始 NeXT ObjC manualacceptInputForMode:beforeDate: 用于明确不触发计时器:



计时器被明确处理为 limitDateForMode: 的副作用



这就是为什么添加 runMode:beforeDate: 是为了方便(参见 NSRunloop.h ):

@interface NSRunLoop (NSRunLoopConveniences)

- (void)run;
- (void)runUntilDate:(NSDate *)limitDate;
- (BOOL)runMode:(NSString *)mode beforeDate:(NSDate *)limitDate;

#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))
- (void)configureAsServer NS_DEPRECATED(10_0, 10_5, 2_0, 2_0);
#endif

另见来自 NeXT:



所以简短的回答:历史。

关于ios - NSRunLoop API 区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18210901/

10-11 14:52