iOS底层原理程序员首页投稿(暂停使用,暂停投稿)

Runloop学习笔记

2018-01-10  本文已影响73人  会编程的男神俊

此文仅为观后笔记!!!地址:http://v.youku.com/v_show/id_XODgxODkzODI0.html

Why Runloops ?

Runloops in Cocoa

Runloops in Cocoa
跟Runloop相关的东西
NSTimer、UIEvent、Autorelease、NSObject+NSDelayedPerforming、NSObject+NSThreadPerformAddition、CADisplayLink、CATransition、CAAnimation、dispatch_get_main_queue()、NSURLConnection

Runloop Callouts

6个调起函数

Runloop机制

runloop构成元素简图

RunloopTimer的封装

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;

+ (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)see;
- (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;
.......

CFRunloopSource

CFRunloopObserver

向外部报告Runloop当前状态的更改,框架中很多机制都由RunloopObserver触发,比如:CAAnimation

typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
    kCFRunLoopEntry = (1UL << 0),
    kCFRunLoopBeforeTimers = (1UL << 1),
    kCFRunLoopBeforeSources = (1UL << 2),
    kCFRunLoopBeforeWaiting = (1UL << 5),
    kCFRunLoopAfterWaiting = (1UL << 6),
    kCFRunLoopExit = (1UL << 7),
    kCFRunLoopAllActivities = 0x0FFFFFFFU
};
RunloopObserver与Autorelease Pool

UIKit通过RunloopObserver在Runloop两次Sleep减对AutoReleasePool进行Pop和Push,将这次Loop中产生的Autorelease对象释放。

CFRunLoopMode

NSDefaultRunloopMode:默认状态,空闲状态。
UITrackingRunLoopMode:滑动ScrollView时,若想保证Timer不被ScrollView影响,则需添加到NSRunLoopCommonModes。
UIInitializationRunLoopMode:私有,App启动时。
NSRunLoopCommonModes:Mode集合

RunLoop与dispatch_get_main_queue()

GCD中dispatch到main queue的block被分发到main RunLoop执行。

RunLoop的挂起与唤醒

RunLoop实践

AFNetworking中RunLoop的创建

AFNetworking中RunLoop的创建

UITableView延迟加载图片的新思路

UITableView延迟加载图片

让Crash的App回光返照

接到Crash的Singal后手动重启RunLoop

Async Test Case

RunLoop sleep前验证

RunLoop源码

地址:https://opensource.apple.com/source/CF/CF-855.17/CFRunLoop.c.auto.html

上一篇 下一篇

猜你喜欢

热点阅读