iOS面试题3

1.自动释放池是什么,如何工作?  

答:内存释放池提供了一个对象容器,每次对象发送autorelease消息时,对象的引用 计数并不真正变化,而是向内存释放池中添加一条记录,记下对象的这种要求。直到 当内存释放池发送drain或release消息时,即当池被销毁前会通知池中的所有对象,全 部发送release消息才会真正将引用计数减少。简单说内存释放池可以自动管理对象释 放问题,这些语句必须要放在下面语句之间,直到池被释放,一个对象要想纳入内存 释放池对象,必须要发送autorelease。 

2.请解释一下iOS应用的沙盒机制?  

iOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该 应用创建的文件夹内读取文件,不可以访问其他地方的内容。所有的非代码文件都保 存在这个地方,比如图片、声音、属性列表和文本文件等。  

1.每个应用程序都在自己的沙盒内  

2.不能随意跨越自己的沙盒去访问别的应用程序沙盒的内容 

3.应用程序向外请求或接收数据都需要经过权限认证 

3 谈谈你对多线程开发的理解?iOS中有几种实现多线程的方法? 

好处: 

1、使用线程可以把程序中占据时间长的任务放到后台去处理,如图片、视频的下载 

2、发挥多核处理器的优势,并发执行让系统运行的更快、更流畅,用户体验更好 

缺点: 

1、大量的线程降低代码的可读性, 

2、更多的线程需要更多的内存空间 

3、当多个线程对同一个资源出现争夺的时候要注意线程安全的问题。 

iOS有三种多线程编程的技术: 

1、NSThread(两种创建方式) 

[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil];NSThread *myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil]; 

[myThread start]; 

2、NSOperationQueue 

NSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init]; 

oprationQueue addOperationWithBlock:^{ 

//这个block语句块在子线程中执行 

http://alloc.sinaapp.com/wp/?p=237 

3、Grand Central Dispatch (GCD) 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

// 耗时的操作 

dispatch_async(dispatch_get_main_queue(), ^{ 

// 更新界面                                                                          

}); 

}); 

http://blog.csdn.net/totogo2010/article/details/8016129

PS:不显示的创建线程的方法:用NSObject的类方法  performSelectorInBackground:withObject: 创建一个线程:[Obj performSelectorInBackground:@selector(doSomething) withObject:nil];

iOS 面试题1

iOS 面试题2

iOS 面试题4

iOS 面试题5

iOS 面试题6

你可能感兴趣的:(iOS面试题3)