OC必备知识
一、 runtime
1. runtime 是OC语言的特性,代表运行时。它的表现比如:定义一个数组越界,代码在编译时并不报错,但是运行后会崩溃。
二、runloop
2. RunLoop 表示一种运行着的循环
2.1 一般app启动后,如果不点击任何控件,不会生成runloop ,它默认是没有启动的;
2.2 runloop 会管理一个自动释放池的创建和释放,在一个runloop 循环结束时会实现自动释放池的释放功能
三、多线程
3. 多线程 包括进程和线程,一个进程可以包括多个线程。 分异步 、同步; 一般常用的有GCD 异步延迟,调用主线程 等;
四、内存管理
4. 内存
4.1 主要有代码区、堆、栈;堆中动态进行分配和释放;与堆区别较大的是,栈可以提前到编译时就确定内存地址,而堆很多都是运行时才确定;
4.2 iOS分ARC和MRR 自动释放,和手动释放; 主要涉及引用计数器,强引用,弱引用等知识;
4.3 可以通过Istrucements对内存泄漏进行调试;
4.4 内存吃紧时,会调用- (void) receiveMermeryWarning ; 最终会调用malloc库中的free( ) 函数
五、runtime 消息机制
5. runtime的消息机制 OC消息发送与方法发生在运行阶段,而非编阶段;obj——msgSend
六、链表寻址方式
6. 链表寻址方式 涉及到算法结构,类似快速比较, 逐个比较
七、代理,block, 通知的区别
7.主要区别
7.1 代理 OC中的代理。 代理运用分为以下几步:1.设置代理,分为必须实现,可选实现;2,设置好后要声明代理属性;3.然后在.m文件中 调用代理属性 4.在其他类中实现代理方法,5.需要先引用头文件,6设置代理;7.实现代理方法;
7.2 代理:一对一”,对同一个协议,一个对象只能设置一个代理delegate;
通知:可以一对多,注册通知中心后,不在乎是否接收;而代理在乎实现结果; block:block是一个代码块,它在引用时需要主要循环引用,在block外一般声明 weak self 防止循环引用
7.3 weak asign copy strong 区别
7.3.1 使用时,assign 一般定义数据类型,strong 一般定义 模型对象;
7.3.2 strong 与 weak 的区别主要是 weak 会随之对象本身的消失而消失,而strong和copy 不会,同时,strong时引用计数器会 +1 ; copy 时 会先将旧对象release 在赋予新的对象
7.4 OC声明属性的关键词;参数 包括了:原子性;读写属性;setter语意方法; atomic多线程访问下的安全保障,但是浪费资源;nonatomic
禁止多线程,相比atomic节省资源;
<欢迎交流:gtommy0571@gmail.com>