iOS面试题集锦

iOS Study

1.Difference between shallow copy and deep copy?
浅复制和深复制的区

答案:浅复制:只复制指向象的指,而不复制引用象本身。复制:复制引用象本身。意思就是我有个A象,复制一份后得到A_copy象后,于浅复制来AA_copy指向的是同一个内存源,复制的只不是是一个指象本身是只有一份,那如果我A_copy行了修改操作,那么A引用的象同被修改,背了我复制拷的一个思想。深复制就好理解了,内存中存在了两份独立象本身。用网上一哥通俗的将就是:浅复制好比你和你的影子,你完蛋,你的影子也完蛋深复制好比你和你的克隆人,你完蛋,你的克隆人活着。

2.What is advantage of categories? What is difference between implementing a category and inheritance?
类别的作用?承和类别中有何区

答案:category 可以在不悉,不改原来代的情况下往里面添加新的方法,只能添加,不能除修改。并且如果类别和原来中的方法生名称冲突,类别将覆盖原来的方法,因类别具有更高的类别主要有3个作用:
(1)分散到多个不同文件或多个不同框架中。
(2)私有方法的前向引用。
(3)象添加非正式
 承可以增加,修改或者除方法,并且可以增加属性。

3.Difference between categories and extensions?
类别展的区

答案:categoryextensions的不同在于 后者可以添加属性。另外后者添加的方法是必的。
extensions可以认为是一个私有的Category

4.Difference between protocol in objective c and interfaces in java?
obc中的java中的接口概念有何不同?

答案:OBC中的代理有2,官方定 formalinformal protocol前者和Java接口一
informal protocol中的方法属于模式考范畴,不是必的,但是如果有,就会改的属性。关于正式类别和非正式我很早前学候大致看,也写在了学教程里
“非正式概念其就是类别的另一种表达方式里有一些你可能希望的方法,你可以使用他更好的完成工作个意思是,些是可的。比如我要一个更好的方法,我就会申明一个这样类别。然后你在后期可以直接使用些更好的方法。么看,类别玩意儿有点像的可选协"
在来看,其protocal开始两者都一和范起来操作,因为资料中非正式使用interface在我看到中两个修饰词(@requied)”选实(@optional)”

5.What are KVO and KVC?


答案:kvc:- 编码是一种访问象的属性使用字符串来标识属性,而不是通用存取方法,直接或通过实访问的机制。很多情况下可以化程序代apple文档其了一个很好的例子。
kvo:察机制,他提供了察某一属性化的方法,极大的化了代具体用看到哼用到的一个地方是于按化状的的控。比如我自定的一个button
[cpp] 
[self addObserver:self forKeyPath:@"highlighted" options:0 context:nil]; 
 
 
#pragma mark KVO 
 
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    if ([keyPath isEqualToString:@"highlighted"] ) { 
        [self setNeedsDisplay]; 
    } 
} 

于系是根据keypath去取的到相生改,理上来是和kvc机制的道理是一的。kvc机制如何通key找到value
“当通KVC,比如:[self valueForKey:@”someKey”],程序会自试图几种不同的方式解析用。首先象是否有 someKey 个方法,如果没找到,会继续象是否someKey量(iVar),如果没有找到,程序会继续试图调用 -(id) valueForUndefinedKey:个方法。如果个方法是没有被,程序会抛出一个NSUndefinedKeyException异常错误
 
(cocoachina.com注:Key-Value Coding找方法的候,不仅仅someKey个方法,getsomeKey个方法,前面加一个get,或者_someKey以及_getsomeKey几种形式。量的候也会不仅仅someKey量,也会_someKey量是否存在。)
 
valueForUndefinedKey:方法的主要目的是当你使用-(id)valueForKey方法从象中象能错误生前,有最后的机会响求。这样做有很多好,下面的两个例子明了这样做的好“
来至cocoa应该挺有道理。知道button却是存在一个highlighted.因此何上面我只是add一个相关的keypath就行了,可以按照kvc找的理解,就去了。

6.What is purpose of delegates?
代理的作用?

答案:代理的目的是改控制。允一个在某些特定刻通知到其他,而不需要取到那些的指。可以减少框架复度。另外一点,代理可以理解java中的回调监听机制的一种似。

7.What are mutable and immutable types in Objective C?
obc中可修改和不可以修改型。

答案:可修改不可修改的集合个我个人理解就是可添加修改和不可添加修改一比如NSArrayNSMutableArray前者在初始化后的内存控件就是固定不可的,后者可以添加等,可以新的内存空

8.When we call objective c is runtime language what does it mean?
们说obc运行言是什么意思?

答案:多。 主要是将数据型的确定由编译,推到了运行问题浅涉及到两个概念,运行和多,运行机制使我直到运行才去决定一个象的类别,以及类别象指定方法。:不同象以自己的方式响相同的消息的能力叫做多意思就是假生物life)都用有一个相同的方法-eat;
那人属于生物,猪也属于生物,都承了life后,各自的eat,但是用是我只需用各自的eat方法。也就是不同的象以自己的方式响了相同的消息(响eat器)。因此也可以,运行机制是多的基~~~

9.what is difference between NSNotification and protocol?
通知和的不同之

答案:有控制(has-a)的关系,通知没有。首先我一开始也不太明白,什么叫控制业术~)。但是分析下通知和代理的行模式,我大致可以有自己的理解,通知的,它可以一多,一条消息可以多个消息接受者。代理按我的理解,到不是直接不能一多,比如我知道的明星经济代理人,很多候一个经济负责好几个明星的事只是于不同明星,代理的事物象都是不一的,一一,不可能明天要A明星要一个布会,代理人布会的消息后,B布会了。但是通知就不一,他只关心出通知,而不关心多少接收到感趣要理。因此控制has-a从英大致可以看出,有和可控制的关系。

10.What is push notification?
什么是推送消息?

11.Polymorphism关于多

答案:多,子可以目其可以出到一切面向言中,因此关于多承和封装基本最好都有个自我意的理解,也并非一定要把料上写的能背出来。最重要的是化成自我理解。

12.Singleton?
例的理解

答案:1112目其出的有点泛泛的感了,可能言需要或是必的基基本能用熟悉的言写出一个例,以及可以运用到的景或是你程中碰到运用的此种模式的框架等。一步点,考下如何在多线访问的安全性。

13.What is responder chain?
说说应链

答案: 事件响应链。包括点事件,画面刷新事件等。在图栈内从上至下,或者从下之上播。可以点事件的分以及理。具体可以去看下touch事件这块。因为问的太抽象化了怀目出到越后面就越

14.Difference between frame and bounds?
framebounds有什么不同?

答案:frame指的是:view在父view中的位置和大小。(参照点是父的坐
bounds指的是:view在本身坐中 的位置和大小。(参照点是本身坐

15.Difference between method and selector?
方法和器有何不同?

答案:selector是一个方法的名字,method是一个合体,包含了名字和.
情可以看apple文档。

16.Is there any garbage collection mechanism in Objective C.?
OBC的垃圾回收机制?

答案: OBC2.0Garbage collection,但是iOS平台不提供。一般我了解的objective-c于内存管理都是手操作的,但是也有自放池。但是差了大部分料,貌似不要和arc机制搞混就好了。求更多~~

17.NSOperation queue?


答案:存放NSOperation的集合操作和操作列,基本可以看成java中的线程和线程池的概念。用于ios线程开问题网上部分料提到一点是,然是queue,但是却并不是列的概念,放入的操作并非是按照格的先进现出。这边又有个疑点是,列来,先先出的概念是Afunc添加进队列,Bfunc跟着也列,Afunc个是必然的,但是Bfunc是等Afunc完全操作完以后,B才开始启并且行,因此列的概念离乱上有点背了多线个概念。但是念一想其可以参考行的取票和叫号系因此AB先排取票但是B率先行完操作,我亦然可以感性认为这还是一个列。但是后来看到一票关于操作话题的文章,其中有一句提到
“两个操作提交的时间间隔很近,线程池中的线程,先启是不定的。”
queue名字有点忽悠人了,不如pool~
合一点,我知道他可以比大的用在于可以帮线程就好了。

18.What is lazy loading?

答案:模式,只在用到的候才去初始化。也可以理解成延得最好也最的一个列子就是tableView片的加载显示了。一个延,避免内存高,一个异步加,避免线程堵塞。

19.Can we use two tableview controllers on one viewcontroller?
是否在一个控制器中嵌入两个tableview控制器?

答案:一个控制只提供了一个View,理上一个tableViewController也不能放吧,只能可以嵌入一个tableview。当然,目本身也有歧,如果不是我定性思维认为UIViewController而是宏的表示控制者,那我倒是可以把其看成一个控制者,它可以控制多个控制器,比如TabbarController
的感

20.Can we use one tableview with two different datasources? How you will achieve this?
一个tableView是否可以关两个不同的数据源?你会怎么理?

答案:首先我从代来看,数据源如何关上的,其是在数据源关的代理方法里的。因此我并不关心如何去关他,他怎么关上,方法只是我返回根据自己的需要去置如相关的数据源。因此,我得可以置多个数据源啊,但是有个问题是,你是想干嘛呢?想列表如何示,不同的数据源分区示?

21.Objectc的类可以多重继承么?可以实现多个接口么?重写一个类的方式用继承好还是分类好?为什么?

Objective-c只支持单继承,如果要实现多继承的话,可以通过类别和协议的方式来实现,cocoa 中所有的类都是NSObject 的子类,多继承在这里是用protocol 委托代理 来实现的。

22.#import #include 又什么区别 #import<> 跟 #import""又什么区别?

答案:@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文 件中还是需要使用#import#import比起#include的好处就是不会引起交叉编译。

23.类变量的@protected ,@private,@public,@package声明各有什么含义?

 

 

24.id 声明的对象有什么特性?

答案:id是个很重要的类型,是个可以指向任何类型的指针或者可以理解为指向任何未知类型的指针。

25.MVC是什么?有什么特性?为什么在iPhone上被广泛运用?

答案:MVC设计模式考虑三种对象:模型对象、视图对象、和控制器对象。模型对象代表 特别的知识和专业技能,它们负责保有应用程序的数据和定义操作数据的逻辑。视图对象知道如何显示应用程序的模型数据,而且可能允许用户对其进行编辑。控制 器对象是应用程序的视图对象和模型对象之间的协调者。

26.对于语句NSString* testObject = [[NSData alloc] init];testObject 在编译时和运行时分别是什么类型的对象?

 

27.什么是安全释放?

 

28.为什么有些4.0独有的objectivec 函数在3.1上运行时会报错.4.0独有的类在3.1上分配内存时不会报错?分配的结果是什么?

 

29.为什么4.0独有的c函数在3.1的机器上运行不会报错(在没有调用的情况下?)而4.0独有的类名在3.1的机器上一运行就报错?

 

30.异常exception 怎么捕获?不同的CPU结构上开销怎样?C中又什么类似的方法?

 

31.property中属性retain,copy,assgin的含义分别是什么?有什么区别?将其转换成getset方法怎么做?有什么注意事项?

 

32.委托是什么?委托的property声明用什么属性?为什么?

 

33.浅拷贝和深拷贝区别是什么?...

34.Cocoa中有虚基类的概念么?怎么简洁的实现?

 

35.自动释放池跟GC(垃圾回收)有什么区别?iPhone上有GC么?[pool release] 和[pool drain]有什么区别?

iPhone上没有GCiPhone开发的时候没有垃圾回收机制。

在垃圾回收环境中,release是一个空操作。因此,NSAutoreleasePool提供了drain方法,在引用计数环境中,该方法的作用等同于调用release,但在垃圾回收环境中,它会触发垃圾回收(如果自上次垃圾回收以来分配的内存大于当前的阈值)。因此,在通常情况下,您应该使用drain而不是release来销毁自动释放池。

36.

for(int index = 0; index < 20; index ++){

    NSString *tempStr = @”tempStr”;

    NSLog(tempStr);

    NSNumber *tempNumber = [NSNumber numberWithInt:2];

    NSLog(tempNumber);

}

这段代码有什么问题.?会不会造成内存泄露(多线程)?在内存紧张的设备上做大循环时自动释放池是写在循环内好还是循环外好?为什么?

 

37.内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?

 

38.在一个对象释放前.如果他被加到了notificationCenter 中.不在notificationcenterremove这个对象可能会出现什么问题?

 

39.怎样实现一个 singleton的类.给出思路。

 

40.什么是序列化或者Acrchiving,可以用来做什么,怎样与copy结合,原理是什么?.

 

41. 线程与进程的区别和联系?

答案: 进程和线程都是由操作系统所体会的程序运行的基本 单元,系统利用该基本单元实现系统对应用的并发性。

程和线程的主要差别在于它们是不同的操作系统资源 管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变 量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一 些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

42.iphone上有两件事情要做,请问是在一个线程里按顺序做效率高还是两个线程里做效率高?为什么?

 

43.runloop是什么?在主线程中的某个函数里调用了异步函数,怎么样block当前线程,且还能响应当前线程的timer事件,touch事件等.

 

44.ios平台怎么做数据的持久化?coredatasqlite有无必然联系?coredata是一个关系型数据库吗?

iOS中可以有四种持久化数据的方式: 属性列表、对象归档、SQLite3Core Datacore data可以使你以图形界面的方式快速的定义app的数据模型,同时在你的代码中容易获取到它。core data提供了基础结构去处理常用的功能,例如保存,恢复,撤销和重做,允许你在app中继续创建新的任务。在使用core data的时候,你不用安装额外的数据库系统,因为core data使用内置的sqlite数据库。core data将你app的模型层放入到一组定义在内存中的数据对象。core data会追踪这些对象的改变,同时可以根据需要做相反的改变,例如用户执行撤销命令。当core data在对你app数据的改变进行保存的时候,core data会把这些数据归档,并永久性保存。

mac os xsqlite库,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。可以在多个平台使用,sqlite是一个轻量级的嵌入式sql数据库编程。与core data框架不同的是,sqlite是使用程序式的,sql的主要的API来直接操作数据表。

Core Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS)虽然Core Dta支持SQLite作为一种存储类型,但它不能使用任意的SQLite数据库。Core Data在使用的过程种自己创建这个数据库。Core Data支持对一、对多的关系。

45.阐述一个nil对象从interface bulider产生,到载入程序运行空间,最后被释放时所经历的生命周期.

 

46.notification是同步还是异步? kvo是同步还是异步?notification是全进程空间的通知吗?kvo呢?

 

47.kvc是什么?kvo是什么?有什么特性?

48.响应者链是什么?

49.unix上进程怎么通信?

   UNIX主要支持三种通信方式:

   1. 基本通信:主要用来协调进程间的同步和互斥

   (1)锁文件通信

      通信的双方通过查找特定目录下特定类型的文件(称锁文件)来完成进程间  对临界资源访问时的互斥;例如进程p1访问一个临界资源,首先查看是否有一个特定类型文件,若有,则等待一段时间再查找锁文件。

   (2)记录锁文件

   2. 管道通信:适应大批量的数据传递

   3. IPC    :适应大批量的数据传递

50.timer的间隔周期准吗?为什么?怎样实现一个精准的timer?

 

51.UIscrollVew用到了什么设计模式?还能再foundation库中找到类似的吗?(答案众多,不知道哪个是对的~~)

模板(Template)模式,所有datasourcedelegate接口都是模板模式的典型应用,

组合模式composition,所有的container view都用了这个模式

观察者模式observer,所有的UIResponder都用了这个模式。

52如果要开发一个类似eclipse的软件,支持插件结构。且开放给第三方开发。你会怎样去设计它?(大概思路)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值