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];
网友评论