Skip to content

Instantly share code, notes, and snippets.

@YauzZ
Created August 24, 2016 02:55
Show Gist options
  • Save YauzZ/3d08fdd01372ccd971f91ea4c0831684 to your computer and use it in GitHub Desktop.
Save YauzZ/3d08fdd01372ccd971f91ea4c0831684 to your computer and use it in GitHub Desktop.
注册 RunLoop 观察者代码示例,from YYKit
// 注册Runloop观察者,from YYKit
static void YYRunLoopObserverCallBack(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) {
if (transactionSet.count == 0) return;
NSSet *currentSet = transactionSet;
transactionSet = [NSMutableSet new];
[currentSet enumerateObjectsUsingBlock:^(YYTransaction *transaction, BOOL *stop) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[transaction.target performSelector:transaction.selector];
#pragma clang diagnostic pop
}];
}
static void YYTransactionSetup() {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
transactionSet = [NSMutableSet new];
CFRunLoopRef runloop = CFRunLoopGetMain();
CFRunLoopObserverRef observer;
observer = CFRunLoopObserverCreate(CFAllocatorGetDefault(),
kCFRunLoopBeforeWaiting | kCFRunLoopExit,
true, // repeat
0xFFFFFF, // after CATransaction(2000000)
YYRunLoopObserverCallBack, NULL);
CFRunLoopAddObserver(runloop, observer, kCFRunLoopCommonModes);
CFRelease(observer);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment