iOS非常规面试题

1.dispatch_once是如何在多线程情况下保证生成对象的唯一性?

答案:dispatch_once用原子性操作block执行完成标记位,同时用信号量确保只有一个线程执行block,等block执行完再唤醒所有等待中的线程。dispatch_once常被用于创建单例、swizzeld method等功能

所有OC对象都继承与NSObject吗,id是什么?

答案: 除了NSObject之外的另一个基类——NSProxy. NSProxy是一个虚类,它可以被继承,并重写下面两个方法来实现消息转发到另一个实例

  • (void)forwardInvocation:(NSInvocation *)invocation;
  • (NSMethodSignature *)methodSignatureForSelector:(SEL)sel ;
    id数据类型可存储任何类型的对象。从某种意义说,它是一般对象类型。

initalize 和load方法的区别?

1.initalize是通过消息发送机制开始调用的,而load是类、分类等等开始加进内存中就开始调用。
2.load方法在程序运行期间只调用一次,而initalize是类开始收到消息的时候调用一次,因为存在继承的关系 可能会被调用多次。
3.系统首先会调用 super类的load方法,然后再调用该类自身的load方法,再次才会调用该类的分类重写的load方法
4.load方法的优先原则是先调用父类、而initalize是优先调用分类。

你可能感兴趣的:(iOS非常规面试题)