2016-01-06 17:24:51 537浏览
上文《iOS开发培训之绝版开发面试题录(一)》为大家已经介绍了五道iOS应用开发面试考题。本文将延续上文为读者继续介绍关于iOS应用开发的面试题及其答案。
iOS开发培训之绝版开发面试题录:
一、ViewController的didReceiveMemoryWarning是在什么时候调用的?默认的操作是什么?
当程序接到内存警告时View Controller将会收到这个消息:didReceiveMemoryWarning从iOS3。0开始,不需要重载这个函数,把释放内存的代码放到viewDidUnload中去。这个函数的默认实现是:检查controller是否可以安全地释放它的view(这里加粗的view指的是controller的view属性),比如view本身没有superview并且可以被很容易地重建(从nib或者loadView函数)。如果view可以被释放,那么这个函数释放view并调用viewDidUnload。你可以重载这个函数来释放controller中使用的其他内存。但要记得调用这个函数的super实现来允许父类(一般是UIVIewController)释放view。如果你的ViewController保存着view的子view的引用,那么,在早期的iOS版本中,你应该在这个函数中来释放这些引用。而在iOS3.0或更高版本中,你应该在viewDidUnload中释放这些引用。
二、列举Cocoa中常见的集中多线程的实现,并谈谈多线程安全的几种解决办法,一般什么地方会用到多线程?
MVC设计模式考虑三种对象:模型对象、视图对象、和控制器对象。模型对象代表特别的知识和专业技能,它们负责保有应用程序的数据和定义操作数据的逻辑。视图对象知道如何显示应用程序的模型数据,而且可能允许用户对其进行编辑。控制器对象是应用程序的视图对象和模型对象之间的协调者。
三、内存管理 Autorelease、retain、copy、assign的set方法和含义?
1、你初始化(alloc/init)的对象,你需要释放(release)它。例如:NSMutableArray aArray = [[NSArray alloc] init];后,需要[aArray release];
2、你retain或copy的,你需要释放它。例如:[aArray retain]后,需要[aArray release];3,被传递(assign)的对象,你需要斟酌的retain和release。例如:obj2 = [[obj1 someMethod] autorelease];对象2接收对象1的一个自动释放的值,或传递一个基本数据类型(NSInteger,NSString)时: 你或希望将对象2进行retain,以防止它在被使用之前就被自动释放掉。但是在retain后,一定要在适当的时候进行释放。
四、iOS有没有垃圾回收?
Objective-C 2.0也是有垃圾回收机制的,但是只能在Mac OS X Leopard 10.5 以上的版本使用。
五、iOS程序运行流程
1、系统调用app的main函数2。 main函数调用UIApplicationMain。
2、 UIApplicationMain创建shared application instance, UIApplication默认的instance。
3、 UIApplicationMain读取Info。plist找到主nib文件, 加载nib,把shared application insta
nce 设为nib的owner。
4、通过nib文件,创建app的独立UIWindows object。
5、 通过nib,实例化了程序的AppDelegate object。
6、 app内部启动结束,application:didFinishLaunchingWith- Options: 被设定成 wAppDelegate instance。
7、 AppDelegate向UIWindow instance发makeKeyAndVisible消息, app界面展示给用户。 app准备好接收用户的操作指令。
当然,随着iOS开发系统的不断升级,越来越多新兴技术要求将围绕着程序员们,所以再好的准备不如切实将知识和操作融会贯通。扣丁学堂iOS开发培训教程视频免费面向读者开放,欢迎大家一起来学习iOS开发技术。