@chenbinghua
2015-09-12T10:33:24.000000Z
字数 1372
阅读 1402
iOS笔记
从字面意思看
运行循环
跑圈
基本作用
保持程序的持续运行
处理App中的各种事件(比如触摸事件、定时器事件、Selector事件)
节省CPU资源,提高程序性能:该做事时做事,该休息时休息
......
int main(int argc, char * argv[]) {
NSLog(@"execute main function");
return 0;
}
// 程序在第4行后直接结束
int main(int argc, char * argv[]) {
BOOL running = YES;
while (running) {
// 执行各种任务,处理各种事件
// ......
} ;
return 0;
}
// 由于main函数里面启动了个RunLoop,所以程序并不会马上退出,保持持续运行状态,程序保持一种死循环的状态,除非破坏的循环条件,程序就会结束退出
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
// UIApplicationMain函数内部就启动了一个RunLoop
// 所以UIApplicationMain函数一直没有返回,保持了程序的持续运行
// 这个默认启动的RunLoop是跟主线程相关联的
iOS中有2套API来访问和使用RunLoop
Foundation
NSRunLoop
Core Foundation
CFRunLoopRef
NSRunLoop和CFRunLoopRef都代表着RunLoop对象
NSRunLoop是基于CFRunLoopRef的一层OC包装,所以要了解RunLoop内部结构,需要多研究CFRunLoopRef层面的API(Core Foundation层面)
唯一
的一个与之对应的RunLoop对象第一次获取
时创建(即RunLoop是懒加载的),在线程结束时销毁
[NSRunLoop currentRunLoop]; // 获得当前线程的RunLoop对象
[NSRunLoop mainRunLoop]; // 获得主线程的RunLoop对象
CFRunLoopGetCurrent(); // 获得当前线程的RunLoop对象
CFRunLoopGetMain(); // 获得主线程的RunLoop对象