-
ios main函数:UIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegate class]))传递nil相当于传递@“UIApplication”
死循环--Runloop 循环 -
runloop:
不是苹果所特有的,ios,macos都有
目的:
保证当前线程不退出。
负责监听事件,ios中网络事件,触摸事件,时钟
runloop模式:
默认模式-NSDefaultRunLoopMode、UI模式-UITrackingRunLoopModel、占位模式(默认&&UI模式)NSRunLoopCommonModes
ui模式的特点:RunLoop会优先处理UI模式下的事件,UI模式只能够被UI事件所唤醒!!
runloop优先处理UI事件
默认模式:source、observer、timer
UI模式:source、observer、timer(拖拽UI影响主线的runloop),拖拽屏幕UI模式被唤醒,ui模式处理事件
如果timer事件添加在默认模式,在有UI操作时,timer事件会被挂起,如果添加在UI模式,只有在ui操作的时候timer事件才会执行,如果想在UI操作和不操作情况下都处理Timer事件,可以在默认模式和UI模式都添加timer事件,为了代码简介,苹果提供了占位模式。 -
在NSTimer中执行耗时错做
[NSThreadsleepTimeInterval:1.0]
耗时操作放子线程
// 开一个子线程
NSThread* thread = [NSTread allocl] initWithBlock:^{
// block里面放耗时操作
}
4.作为属性,强引用,会保住NSThread OC对象的命
线程走没有走和NSThtead对象没有关系,线程由cpu调度,一个强引用的对象没有办法保住线程的名。NSThread OC对象不是线程,NSThread对象用来控制线程。NSthread对象不是线程。
cpu执行完线程上的任务会把线程丢到线程池,线程就释放了;
线程对象不退出NSthread对象就不会释放,让线程由执行不完的任务就行了。
runloop可以从事件队列中取事件执行,每条线程上都有一个runloop,在第一次获取runloop的时候创建,懒加载的;
runloop被创建出来后,并不糊运行,需要手动的Run //开启run意味着开启循环,死循环;通过run用oc的方法就不能停止了。
runloop启动还有一个方法可以指定启动的时间[[NSRunLoop currentRunLoop] runUntilDate:]
[NSTread exit] 退出主线程后,子线程还在执行任务,界面卡住了。
网友评论