iOS面试题要点

来源:互联网 发布:淘宝sc证书怎么回事 编辑:程序博客网 时间:2024/06/07 14:52


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次



0 0
原创粉丝点击