2016-01-06 17:17:38 524浏览
iOS开发技术是当下最受企业欢迎的热门之一,尤其在这个接近万物互联的时代。各行各业的产品出口线都将需要开发应用软件的参与。扣丁学堂由曾入多家五百强企业的顶级讲师们整理出iOS应用开发绝版面试考题录。
浅谈iOS开发培训之绝版开发面试题录:
1.Object-C有多继承吗?没有的话用什么代替?
cocoa 中所有的类都是NSObject 的子类,多继承在这里是用protocol 委托代理来实现的你不用去考虑繁琐的多继承 ,虚基类的概念.ood的多态特性在 obj-c 中通过委托来实现。
2、线程和进程的区别?
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
3、Object-C的内存管理?
当你使用new,alloc和copy方法创建一个对象时,该对象的保留计数器值为1.当你不再使用该对象时,你要负责向该对象发送一条release或autorelease消息。这样,该对象将在使用寿命结束时被销毁。当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来确保该对象被清理.如果你打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它。如果你保留了某个对象,你需要(最终)释放或自动释放该对象.必须保持retain方法和release方法的使用次数相等。
4、对象是什么时候被release的?
引用计数为0时。autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。对于每一个Runloop,系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object(就是autorelease的对象)会被release。
5、那什么是一个Runloop呢?
一个UI事件,Timer call, delegate call,都会是一个新的Runloop。
未完待续,请关注coding学堂iOS开发培训之绝版开发面试题录后续内容。