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 manual , acceptInputForMode: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/