面试问答题
1、 类扩展与分类的区别?
2、 id 声明的对象有什么特性?
3、 原子(atomic)跟非原子(non-atomic)属性有什么区别?
4、 代理的作用?
5、 什么是推送消息?
参考答案
1、分类的小括号中必须有名字
@interface 类名(分类名字) /*方法声明*/ @end @implementation类名(分类名字) /*方法实现*/ @end
• 分类只能扩充方法,不能扩展属性和成员变量(如果包含成员变量会直接报错)。
• 如果分类中声明了一个属性,那么分类只会生成这个属性的set、get方法声明,也就是不会有实现。
2、Id 声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象;
3、1). atomic提供多线程安全。是防止在写未完成的时候被另外一个线程读取,造成数据错误
2). non-atomic:在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。
4、代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。
另外一点,代理可以理解为java中的回调监听机制的一种类似。
5、推送通知更是一种技术。简单点就是客户端获取资源的一种手段。
普通情况下,都是客户端主动的pull。推送则是服务器端主动push。