1、自动释放池是什么,如何工作
自动释放池是NSAutorelease类的一个实例,当向一个对象发送autorelease消息时,该对象会自动入池,待池销毁时,将会向池中所有对象发送一条release消息,释放对象。
2、为什么delegate(代理)属性都是assign而不是retain
防止循环引用,以致对象无法得到正确的释放
3、iOS开发中数据持久性,有哪几种
plist文件写入、对象归档、sqlite3数据库、coredata
4、什么是KVC和KVO?以及它们之间的关系是什么?
1⃣️KVC(键值编码)是一种间接访问对象实例变量的机制,该机制可以不通过存取方法就可以访问对象的实例变量。
2⃣️KVO(键值观察)是一种能使得对象获取到其他对象属性变化的通知机制。
3⃣️实现KVO键值观察模式,被观察的对象必须使用KVC键值编码来修改它的实例变量,这样才能被观察者观察到。因此,KVC是KVO的基础或者说KVO的实现是建立在KVC的基础上的。
5、简述常见的设计模式
单例模式、代理模式、观察者模式、工厂模式、策略、MVC模式
6、内存管理在dealloc方法中,用release方法好,还是用self.xxx = nil好?
使用self.xxx = nil更好,因为先调用了release方法,而且还将变量设置为nil,这样就更安全的释放对象,防止野指针调用。
7、线程与进程的区别和联系?
一般的应用程序是单个进程,也有多进程(谷歌浏览器),进程是个静态的容器,里面容纳了很多个线程,线程是一系列方法的线性执行路径。
8、OC语言的优缺点
1⃣️优点:类目、动态识别、支持C语言、OC与C++可以混编
2⃣️缺点:不支持命名空间、不支持运算符重载、不支持多重继承
9、代理delegate与通知Notification、block的使用区别
delegate与block一般是用于两个对象一对一之间的通信交互,delegate需要定义协议方法,代理对象实现协议方法,并且需要建立代理关系才可以实现通信。block更加简洁,不需要定义繁琐的协议方法,但是如果通信事件比较多的话,建议使用delegate。Notification主要用于一对多情况下通信,而且,通信对象之间不需要建立关系,但是使用通知,代码可读性差。
网友评论