iOS面试题集锦(1~10)

网友投稿 1068 2022-09-04

iOS面试题集锦(1~10)

iOS面试题集锦(1~10)

iOS面试题集锦(1~10)

1. Objective-C的内存管理?

答:

1)当你使用new,alloc和copy方法创建一个对象时,该对象的保留计数器值为1.当你不再使用该对象时,你要负责向该对象发送一条release或autorelease消息.这样,该对象将在使用寿命结束时被销毁.

2)每retain一次会使引用系数就加1,相应地要在适当位置release

2 浅谈iOS开发中几种基本的设计模式

答:

1)模型视图控制器(MVC)。控制器负责行为,模型提供数据源,视图显示UI。模型和视图之间尽量不要直接打交道,他们之间的交互应该通过控制器来进行,控制器充当着桥梁的作用。这样设计的目的是使不同功能的类之间尽量解耦,以利于程序的扩展。

2)代理模式

委托代理(degegate),顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。反映到程序中,首先要明确一个对象的委托方是哪个对象,委托所做的内容是什么。这里所做的内容是靠协议中的方法来实现,方法分两种:必需实现(@required)的方法和根据情况选择实现(@optional)的方法。

举个例子:你是房屋租赁中介,某个房东和你签订协议,请你替他把房子出租出去。这时,你就是房东的代理,你必须实现的方法是把屋子出租出去,选择实现的方法是装修、添置家具、打隔断等(依据协议而定)。

3)通知模式

通知模式是观察者模式的一种。a对象在通知中心注册了观察者之后,b对象发出通知广播,a对象收到通知后就知道去做具体的事。观察者可以是一个或多个,也可以没有。举个例子:微博切换帐号后会发出一个通知,让多个界面重新刷新数据。

4)KVO模式

Key-Value-Observer模式也是观察者模式的一种。KVO的机制为:当指定的被观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者。举个例子,在控制器里通过addObserver:forKeyPath:options:context:注册一个数据源观察者,当数据源里的数据发生变化时,通过willChangeValueForKey:和didChangeValueForKey:这一对方法发出广播,控制器收到广播后就可以利用新的数据来刷新界面。

5)单例模式

通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

单例模式有时也是出于现实逻辑的考虑,比如,一个学校只能有一个校长,校长对象应该就是一个单例对象。虽然从程序的角度你可以初始化多个校长,但这并不符合客观现实。

3.代理和通知的区别

答:

代理通常用于一对一的关系,通知可以是一对一或一对多或一对无的关系。代理的receive可以把结果返回给sender,通知的sender只负责把消息发送出去不需要返回结果

4.#import,#inlcude与@class的区别?

答:

1)假如有三个类A,B,C,B头文件中包含了C,A头文件包含了B和C,此时若用#include,则会提示C被重复定义的错误,而用#import则可以编译通过。这是因为#import会作判断,不会引起重复编译的问题。

3)在iOS开发中,Objective-c类应使用#import,C/C++类应使用#include

5 请写出一个对象的setter方法和getter方法

答:

以NSObject对象为例,getter方法为:

-(NSObject *)object{return _object;}setter方法为:-(void)setObject:(NSObject*)newObject{if(_object != newObject) { [_object release]; _object = [newObject retain]; }}

(注,上面方法中若是NSString对象则应把retain改为copy)

6.Difference between shallowcopy and deep copy?
浅复制和深复制的区别?

答:

浅层复制:只复制指向对象的指针,而不复制引用对象本身。

深层复制:复制引用对象本身。

比如有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源
还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改 。深复制就好理解了,内存中存在了
两份独立对象本身。

打个比方:浅复制好比你和你的影子,你完蛋,你的影子也完蛋
。深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。

7.What is advantage ofcategories? What is difference between implementing a category and inheritance?类别的作用?继承和类别在实现中有何区别?

答:

类别可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除或修改。
并且如果类别和原来类中的方法产生名称冲突(名称重复),则类别将覆盖原来的方法,因为类别具有更高的优先级。
类别主要有3个作用:
(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。

继承可以增加或修改 方法,并且可以增加属性。

8.Difference between frame andbounds?
frame和bounds有什么不同?

答:

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

bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)。Bounds的左上角坐标通常都为(0,0),但也有例外,比如UIScrollView。

9.Difference between method and selector?
方法和选择器有何不同?

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

10.What is lazy loading?

答:

懒汉模式,只在用到的时候才去初始化。
也可以理解成延时加载。
最简单的一个列子就是tableView中图片的加载显示了。
一个延时加载,避免内存过高,一个异步加载,避免线程堵塞。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用FreeMarker的Web Project例子
下一篇:埋在 MYSQL 数据库应用中的17个关键问题!(埋在青春里)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~