看一段代码的执行时间
CFAbsoluteTime startTime = CFAbsbsoluteTimeGetCurrent();
//代码
CFAbsoluteTime time = (CFAbsoluteTimeGetCurrent() - startTime);
获取本地沙盒地址
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMAsk, YES);
NSString *documentDirectory = [documentPaths objectAtIndex:0];
mac本地配置服务器
终端输入apache:sudo apachectl start
1、前往Apache服务器的文件地址: /Library/WebServer/Documents
runloop
Runloop和线程是什么关系?
每条线程都有唯一的一个与之对应的RunLoop对象,其关系是保存在一个全局的 Dictionary 里;主线程的RunLoop已经自动创建,子线程的RunLoop需要主动创建;RunLoop在第一次获取时创建,在线程结束时销毁
Runloop的mode作用是什么?
指定事件在运行循环中的优先级的,
以+scheduledTimerWithTimeInterval:的方式触发的timer,在滑动页面上的列表时,timer会暂停回调, 为什么?
滑动scrollView时,主线程的RunLoop会切换到UITrackingRunLoopMode,执行的也是UITrackingRunLoopMode下的任务(Mode中的item),而timer是添加在NSDefaultRunLoopMode下的,所以timer任务并不会执行,只有当UITrackingRunLoopMode的任务执行完毕,runloop切换到NSDefaultRunLoopMode后,才会继续执行timer。
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; [[NSRunLoop currentRunLoop] run];
AutoreleasePool 和 RunLoop 有什么联系?
iOS应用启动后会注册两个 Observer 管理和维护 AutoreleasePool。应用程序刚刚启动时默认注册了很多个Observer,其中有两个Observer的 callout 都是 _ wrapRunLoopWithAutoreleasePoolHandler,这两个是和自动释放池相关的两个监听。
第一个 Observer 会监听 RunLoop 的进入,它会回调objc_autoreleasePoolPush() 向当前的 AutoreleasePoolPage 增加一个哨兵对象标志创建自动释放池。这个 Observer 的 order 是 -2147483647 优先级最高,确保发生在所有回调操作之前。
第二个 Observer 会监听 RunLoop 的进入休眠和即将退出 RunLoop 两种状态,在即将进入休眠时会调用 objc_autoreleasePoolPop() 和 objc_autoreleasePoolPush() 根据情况从最新加入的对象一直往前清理直到遇到哨兵对象。而在即将退出 RunLoop 时会调用objc_autoreleasePoolPop() 释放自动自动释放池内对象。这个Observer 的 order 是 2147483647 ,优先级最低,确保发生在所有回调操作之后。
字面量语法
字面量数组
NSArray *arr = [NSArray arrayWithObject: obj1, obj2, obj3, nil];
NSArray *arr = @[obj1,obj2,obj3,nil];
当obj2为nil时,上面那行会成功创建,并且只有一个元素obj1,下面这行会崩溃。