iOS面试题3

作者: SmallHer | 来源:发表于2018-01-15 13:49 被阅读361次

    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

        本文链接:https://www.haomeiwen.com/subject/bcoroxtx.html