iOS 面试题

1. 关键字 retain 和 release 的功能:

retain 对 OC 对象计数器 +1,release 是对 OC 对象计数器 -1,减到 0 就自动调用 OC 对象的 dealloc 函数。

2. 请简述关键字 alloc 和 init 的区别:

alloc 是分配内存,对象计数器为 1;init 是初始化工作,类似于 C++ 构造函数。

3. 请描述 iOS 开发中 XML 解析涉及的类:在开发中,我更多地使用 JSON。

4. 请简述 KVO(Key-Value Observing)及其优势:可以观察某个变量的变化。

5. 请分别简述 notification 的同步和异步调用方法:notification 是广播模式/观察者模式,可以异步查看系统或自定义一些事件。

6. 如何调用 UIView 的 drawRect 消息:定制 UIViewController 直接用图形画底层控件一般用 drawRect:(CGRect)rect; 我用的很少,一般组合定制控件。

7. view 和 viewController 的关系:UIViewController 其实相当于一个容器,一个控制器,里面包含了一个根的 UIView。

8. 如何实现多线程操作:涉及的类有 NSThread、NSOperation、Blocks/GCD、pthread。常用 NSThread 实现简单示例:`NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadFunc) object:nil]; [thread start];`。Blocks 是工作线程。

9. 如何定制 UIViewController:可以通过继承 UIViewController 并实现其 main 函数来实现。