程序员人生 网站导航

iOS面试题

栏目:综合技术时间:2015-05-25 09:20:59
  1. NSArray 和 NSMutableArray 的区分(线程方向)?
    NSArray是线程安全的, NSMutableArray是线程不安全的, 多线程中使用 需要 手动加锁 NSLock 或使用 @synchronized 修饰.
  2. Autorelease pool 实现原理?
    在ARC中使用 @@autoreleasepool修饰需要手动添加到释放池的代码.大概意思是autorelease pool 内部为1个双向链表, 每一个链表元素为1个页,每一个页是1个栈,详细的实现机制在这里,虽然不是很懂,感觉博主写的很好
  3. iOS沙盒机制
    默许情况下,每一个沙盒含有3个文件夹:Documents, Library 和 tmp。由于利用的沙盒机制,利用只能在几个目录下读写文件
    Documents:苹果建议将程序中建立的或在程序中阅读到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
    Library:存储程序的默许设置或其它状态信息;
    Library/Caches:寄存缓存文件,iTunes不会备份此目录,此目录下文件不会在利用退出删除
    tmp:提供1个即时创建临时文件的地方。
    iTunes在与iPhone同步时,备份所有的Documents和Library文件。
    iPhone在重启时,会抛弃所有的tmp文件。
  4. 深拷贝和浅拷贝的区分? 官方指南
    首先, 被拷贝对象必须实现了NSCopying协议
    浅拷贝: 被拷贝在内存中只有1份, 只是增加了1个指针指向这个对象, 浅拷贝致使该对象援用计数加1.
    深拷贝为被拷贝对象在内存中复制1份被拷贝着所持有,原来的对象援用计数不变,拷贝出来的对象援用计数加1.
    拷贝方法为 NSCopying协议方法: + (id)copyWithZone:(struct _NSZone *)zone+ (id)mutableCopyWithZone:(struct _NSZone *)zone 具体返回的是深拷贝还是浅拷贝, 需要看代理方法是如何实现的, 不过copy方法返回的始终为不可变对象, mutableCopy方法返回的是可变对象. 另外 归档和反归档是真实的深拷贝.
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐