iOS面试题-第十二页

作者: 像羽毛那样轻 | 来源:发表于2016-03-30 10:37 被阅读47次

    21. oc中可修改和不可以修改类型。

    答:可修改不可修改的集合类。这个我个人简单理解就是可动态添加修改和不可动态添加修改一样。

    比如NSArray和NSMutableArray。前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存空间。

    22. 我们说的oc是动态运行时语言是什么意思?

    答:多态。 主要是将数据类型的确定由编译时,推迟到了运行时。

    这个问题其实浅涉及到两个概念,运行时和多态。

    简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。

    多态:不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的方法-eat;

    那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。

    也就是不同的对象以自己的方式响应了相同的消息(响应了eat这个选择器)。

    因此也可以说,运行时机制是多态的基础?~~~

    23. 通知和协议的不同之处?

    答:协议有控制链(has-a)的关系,通知没有。

    首先我一开始也不太明白,什么叫控制链(专业术语了~)。但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解

    简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者。

    代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。

    只是对于不同明星间,代理的事物对象都是不一样的,一一对应,不可能说明天要处理A明星要一个发布会,代理人发出处理发布会的消息后,别称B的

    发布会了。但是通知就不一样,他只关心发出通知,而不关心多少接收到感兴趣要处理。

    因此控制链(has-a从英语单词大致可以看出,单一拥有和可控制的对应关系。

    24. 什么是推送消息?

    答:推送通知更是一种技术。

    简单点就是客户端获取资源的一种手段。

    普通情况下,都是客户端主动的pull。

    推送则是服务器端主动push。 测试push的实现可以查看该博文。

    25. 关于多态性

    答:多态,子类指针可以赋值给父类。

    这个题目其实可以出到一切面向对象语言中,

    因此关于多态,继承和封装基本最好都有个自我意识的理解,也并非一定要把书上资料上写的能背出来

    26. 对于单例的理解

    答:在objective-c中要实现一个单例类,至少需要做以下四个步骤:

    1).为单例对象实现一个静态实例,并初始化,然后设置成nil,

    2).实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,

    3).重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,

    4).适当实现allocWitheZone,copyWithZone,release和autorelease。

    27. 说说响应链

    答: 事件响应链。包括点击事件,画面刷新事件等。在视图栈内从上至下,或者从下之上传播。

    可以说点事件的分发,传递以及处理。具体可以去看下touch事件这块。因为问的太抽象化了

    严重怀疑题目出到越后面就越笼统。

    可以从责任链模式,来讲通过事件响应链处理,其拥有的扩展性

    28. frame和bounds有什么不同?

    答:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)

    bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)

    29. 方法和选择器有何不同?

    答:selector是一个方法的名字,method是一个组合体,包含了名字和实现.

    详情可以看apple文档。

    30. OC的垃圾回收机制?

    答: OC2.0有Garbage collection,但是iOS平台不提供。

    一般我们了解的objective-c对于内存管理都是手动操作的,但是也有自动释放池。

    但是差了大部分资料,貌似不要和arc机制搞混就好了。

    31. NSOperation queue?

    答:存放NSOperation的集合类。

    操作和操作队列,基本可以看成java中的线程和线程池的概念。用于处理ios多线程开发的问题。

    网上部分资料提到一点是,虽然是queue,但是却并不是带有队列的概念,放入的操作并非是按照严格的先进现出。

    这边又有个疑点是,对于队列来说,先进先出的概念是Afunc添加进队列,Bfunc紧跟着也进入队列,Afunc先执行这个是必然的,

    但是Bfunc是等Afunc完全操作完以后,B才开始启动并且执行,因此队列的概念离乱上有点违背了多线程处理这个概念。

    但是转念一想其实可以参考银行的取票和叫号系统。

    因此对于A比B先排队取票但是B率先执行完操作,我们亦然可以感性认为这还是一个队列。

    但是后来看到一票关于这操作队列话题的文章,其中有一句提到

    “因为两个操作提交的时间间隔很近,线程池中的线程,谁先启动是不定的。”

    瞬间觉得这个queue名字有点忽悠人了,还不如pool~

    综合一点,我们知道他可以比较大的用处在于可以帮组多线程编程就好了。

    32. 什么是延迟加载?

    答:懒汉模式,只在用到的时候才去初始化。

    也可以理解成延时加载。

    我觉得最好也最简单的一个列子就是tableView中图片的加载显示了。

    一个延时载,避免内存过高,一个异步加载,避免线程堵塞。

    33. 是否在一个视图控制器中嵌入两个tableview控制器?

    答:一个视图控制只提供了一个View视图,理论上一个tableViewController也不能放吧,

    只能说可以嵌入一个tableview视图。当然,题目本身也有歧义,如果不是我们定性思维认为的UIViewController,而是宏观的表示视图控制者,那我们倒是可以把其看成一个视图控制者,它可以控制多个视图控制器,比如TabbarController那样的感觉。

    34. 一个tableView是否可以关联两个不同的数据源?你会怎么处理?

    答:首先我们从代码来看,数据源如何关联上的,其实是在数据源关联的代理方法里实现的。

    因此我们并不关心如何去关联他,他怎么关联上,方法只是让我返回根据自己的需要去设置如相关的数据源。

    因此,我觉得可以设置多个数据源啊,但是有个问题是,你这是想干嘛呢?想让列表如何显示,不同的数据源分区块显示?

    35. 什么时候使用NSMutableArray,什么时候使用NSArray?

    答:当数组在程序运行时,需要不断变化的,使用NSMutableArray,当数组在初始化后,便不再改变的,使用NSArray。需要指出的是,使用NSArray只表明的是该数组在运行时不发生改变,即不能往NSAarry的数组里新增和删除元素,但不表明其数组內的元素的内容不能发生改变。NSArray是线程安全的,NSMutableArray不是线程安全的,多线程使用到NSMutableArray需要注意。

    36. 给出委托方法的实例,并且说出UITableVIew的Data Source方法

    答:CocoaTouch框架中用到了大量委托,其中UITableViewDelegate就是委托机制的典型应用,是一个典型的使用委托来实现适配器模式,其中UITableViewDelegate协议是目标,tableview是适配器,实现UITableViewDelegate协议,并将自身设置为talbeview的delegate的对象,是被适配器,一般情况下该对象是UITableViewController。

    UITableVIew的Data Source方法有- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

    37. 在应用中可以创建多少autorelease对象,是否有限制?

    答案:无

    38. 如果我们不创建内存池,是否有内存池提供给我们?

    答:界面线程维护着自己的内存池,用户自己创建的数据线程,则需要创建该线程的内存池

    39. 什么时候需要在程序中创建内存池?

    答:用户自己创建的数据线程,则需要创建该线程的内存池

    40. 类NSObject的那些方法经常被使用?

    答:NSObject是Objetive-C的基类,其由NSObject类及一系列协议构成。

    其中类方法alloc、class、 description 对象方法init、dealloc、– performSelector:withObject:afterDelay:等经常被使用

    相关文章

      网友评论

        本文标题:iOS面试题-第十二页

        本文链接:https://www.haomeiwen.com/subject/qjnslttx.html