1.类别的作用
http://blog.csdn.net/lonelyroamer/article/details/7704896
2.KVC和KVO
http://www.cnblogs.com/kenshincui/p/3871178.html
http://blog.csdn.net/sakulafly/article/details/14052809
3.通知和代理
http://www.isaced.com/post-201.html
iOS面试锦集(带答案)
1》
答:浅复制,指的是只复制指向对象的指针,而不复制引用对象本身;
深复制,指的是复制引用对象本身。
比如,有个对象A,复制A_copy,对于浅复制,A和A_copy指向的是同一个内存资源,对象本身还是只有一个,如果对A_copy执行了修改操作,那么A引用对象同样被修改;深复制,A和A_copy指向的是两个独立的内存资源,如果堆A_copy执行了修改操作,A的引用对象不会被修改。
2》
答:类别的作用是给已有的类添加新的方法,只能添加,不能删除修改,也不可以添加属性。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级;
类别的三个作用:
1.将类的实现分散到多个不同文件或不同框架中;
2.创建对私有方法的前向引用(私用方法是指没有在h文件里声明的方法);
3.向对象添加非正式协议(创建一个NSObject的类别称为“创建一个非正式协议”,因为NSObject是根类,通过继承关系,所有的类中都有该方法)。
继承可以增加,修改或者删除方法,并且可以增加属性
3》类别和类扩展的区别
答:category和extensions的不同在于后者可以添加属性。另外后者添加的方法是必须要实现的。extensions可以认为是一个私有的category。
4》
5》KVO和KVC
答:KVO是键值监听,监听某一属性变化的方法,比如监控按钮点击变化状态;KVC是键值编码,一种间接访问对象的属性使用字符串来表示属性。
6》
答:代理,也叫委托,就是一个对象让另一个对象替它执行一定的动作
7》
不可修改类型:NSArray,NSSet,NSDictionary,初始化后内存空间是固定不变的;
可修改类型:NSMutableArray,NSMutableSet,NSMutableDictionary,可以动态申请新的内存空间。
8》
答:动态运行时,直到运行时才决定一个对象的类别,以及调用该类别对象指定方法。
多态:不同对象以自己的方式响应相同的消息的能力叫做多态。假设生物类都有一个相同的方法eat,人类继承于生物类,猪类也继承于生物类,实现各自的eat方法。
9》
答:delegate是一个对象让另一个对象替它执行一定的动作,使两个之间的关系,需要声明协议,实现协议方法,设置代理;
notification是可以一对多,多对一,多对多,通知需要设置通知中心,发布者和监听者。
10》
11》
答:多态,不同对象以自己的方式响应相同的消息的能力。
子类指针可以赋值给父类,比如,父类Animal,有一个方法eat,Dog类和Cat类继承于Animal类,Animlal类,Dog类和Cat类都各自有一个eat方法,那么:
Animal *a = [[Dog alloc]init];//子类指针可以赋值给父类
[a eat];//调用的是子类Dog的eat方法
Animal *b = [[Cat alloc]init];//子类指针可以赋值给父类
[b eat];//调用的是子类Cat的eat方法
12》
13》
14》
答:frame是指该View在父类坐标系的位置和大小;
bounds是在该View类坐标系的位置和大小,默认位置是(0,0),通过setBounds,强制将本身的坐标系的左上角点,改为(-30,-30),那么本身的坐标系原点,自然就向右下方偏移(30,30);
center是该view的中心在父类坐标系的位置。
15》
选择器selector是方法的名字;
16》
在iOS移动终端设备中,并不支持垃圾回收机制,因此iPhone并不能堆内存进行自动垃圾回收处理(autorelease):需要注意的是ARC并不是垃圾回收机制,ARC也是需要管理内存的,只不过是隐式的管理内存,编译器会在适当的difference自动插入retain,release和autorelease消息。
17》
18》
懒加载,只在用的时候去初始化,也可以理解为延时加载
19》UITabbarController就可以嵌入多个控制器
20》
21》
答:不可以多重继承,可以实现多个接口
重写类的方法用继承还是分类,用继承的好,若是使用分类,由于分类的方法优先级高于原来类的方法,会覆盖原来的方法,不利于代码的阅读和理解。分类适合用于将不同的方法分别写到不同的文件中,适合团队合作。
22》
答:
#include是C,引入头文件的,
#import是OC,不仅引入头文件,还能拿避免头文件重复引用
#import<>系统头文件
#import""自定义头文件
23》
答:
protected是受保护的,该类和子类可以访问,(默认)
private 私有的,该类可以访问
public 共有的,都可以访问
package 在同一框架下,可以访问
24》
答:id是个可以指向任意类型的指针,或者说事指向任何未知类型的指针。
25》
MVC
model 模型,数据
View 视图
Controller 控制器
1.M和C不要相互通信,通过控制器来传递;
2.控制器可以直接与Model对话,Model通过通知和KVO机制与控制器间接通信;
3.控制器可以直接与View对话,通过Outlet,直接操作View,Outlet直接对应到View中的控件,View通过action向控制器报告事件的发生(如用户点击事件)。控制器是View的直接数据源(数据很可能是控制器从Model中取得并加工过)。
26》
动态运行时语言
编译时是NSString类型,运行时是NSData类型
31》
copy是在get/set方法加锁,
32》委托,委托代理,是指一个对象让另一个对象替它执行一定的动作
委托的property声明 nonatomic, weak
50》
timer时间间隔周期不准,因为会受到触摸等UI事件的影响,计时器只有在runloop的一次循环中被检查,所以如果在上次循环中做了耗时的操作,计时器就被燕鸥执行了,要实现精准的timer用CADisplay,屏幕1秒刷新60次