iOS面试题 集锦(2)

今天就来接着昨天的写啊!!

21 深拷贝和浅拷贝的区别
浅拷贝(copy)是只能复制指向对象的指针,而不复制引用对象本身,通过对象的指针来访问对象,只是赋值地址
深拷贝:复制引用对象本身—再创建一个对象,两个对象独立 相互不影响。

22 什么是安全释放
先将对象release 再置为nil

23 RunLoop是什么
事件循环,是线程里面的一个组件.主线程的RunLoop是自动开启的.分为:计时源(timer source),事件源(输入源):input source.防止CPU中断(保证程序执行的线程不会被系统终止).

24 Runtime是什么
runtime简称运行时,最主要的是消息发送机制
runtime是一套比较底层的纯C语言API,属于一个C语言库,包含了很多底层的C语言API。
平时编码OC代码,在程序运行过程中,其实最终都是转换成了runtime的C语言代码,runtime算是OC的幕后工作者

25 什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?
把对象转换为字节序列的过程称为对象的序列化
把字节序列恢复为对象的过程称为对象的反序列化
将对象写到文件或者数据库里面,并且可以读出来
遵守NSCoding协议,来实现复杂对象的存储
实现该协议后就可以对其进行打包或者解包,然后转换为NSData

26 写一个标准宏MIN,这个宏输入两个参数并返回较小的一个

#define MIN((A),(B)) (A(A:B))

27 iphone os有没有垃圾回收机制?简单阐述一下OC内存管理
没有垃圾回收机制
内存管理机制:使用引用计数管理,分为ARC和MRC,MRC需要程序员自己管理内存,ARC则不需要.但是并不是所有对象在ARC环境下均不需要管理内存,子线程和循环引用并不是这样.
与retain配对使用的是release,retain代表引用计数+1,release代表引用计数-1,当引用计数减为0时,对象则被系统自动销毁.与alloc配对使用的是dealloc,alloc代表为对象开辟内存空间,dealloc则代表销毁对象的内存空间.

28 简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期
进入后台时的方法

- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application

回到前台的方法

 - (void)applicationWillEnterForeground:(UIApplication *)application
- (void)applicationWillResignActive:(UIApplication *)application

29 ViewController 的 alloc,loadView, viewDidLoad, viewWillAppear, viewDidUnload,dealloc、 init分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?

alloc 申请内存时调用
loadView 加载视图时调用
ViewDidLoad 视图已经加载后调用
ViewWillAppear 视图将要出现时调用
ViewDidUnload 视图已经加载但没有加载出来时调用
dealloc 销毁该视图时调用
init 视图初始化时调用

30 描述应用程序的启动顺序。

a 程序入口main函数创建UIApplication实例和UIApplication代理实例 b 在UIApplication代理实例中重写启动方法,设置根ViewController c 在第一ViewController中添加控件,实现应用程序界面

31 为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?请举例说明。

防止循环引用
比如 对象A引用了对象B,对象B引用了对象C,对象C引用了对象B,这时B的引用计数是2,而C的引用计数是1,当A不在使用B的时候,就释放了B的所有权,这时C还在引用B,所以B不会释放,引用计数为1,而此时B也引用了C,B不释放,C也不会释放,所以他们的引用计数都是1,永远都不会释放,形成了循环引用。

32 写一个便利构造器

@interface Person : NSObject
{
    int _age;
    NSString *_name;
}
- (Person *)initWithAge: (int)age andWithName: (NSString *)name; 
+ (Person *)initWithAge: (int)age andWithName: (NSString *)name;//这个类方法在返回Person对象时,就可以给_age和_name赋值,这个就是便利构造器
@end

@implementation Person
- (Person *)initWithAge: (int)age andWithName: (NSString *)name
{
    _age = age;
    _name = name;
}
+ (Person *)initWithAge: (int)age andWithName: (NSString *)name
{
    return [[Person alloc] initWithAge:age andWithName:name];
}
@end

33 NSThread, NSOperation, GCD 三种多线程的对比

NSThread :优点就是比其他两个更加轻量级,使用简单 。缺点就是需要自己管理生命周期,线程同步,加锁,睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销

NSOperstion:优点是不需要关心线程管理,数据同步的问题,可以把精力放在自己需要的操作上,而且是面向对象的。它是个抽象类,要使用必须使用它的子类:NSInvocationOperation,NSBlockOperation.

GCD : 是由苹果开发的一个多核编程的解决方案,iOS4.0以上才有,是代替NSThread和NSOperation的高效强大的技术

35 MVC模式结构
M:模型,是应用程序的主体部分。模型代表了业务数据和业务逻辑。当数据改变的时候,它需要负责通过控制器通知视图,一个模型能为多个视图提供数据,所以提高了应用的可用性。

V:视图,数据的展现,视图是用户看到并且与之交互的界面,视图向用户显示相关数据,并且能接收用户输入的数据,但它并不能进行任何实际的业务处理

C:控制器,逻辑处理,控制实体数据在视图上展示,调用模型处理业务请求。

36 简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?

NotificationCenter 消息中心,消息通知 发送一个通知可以让多个类接收
KVC:利用键-值间接访问类中的某个属性
KVO:利用键-路径间接访问类中的某个属性,也就是观察者模式,基于KVC和通知中心,观察的是实例变量。能实时监听变化
Delegate:委托方,代理方,协议 实现一对一的传值

37 ViewController的didReceiveMemoryWarning是在什么时候被调用的?
1.当应用程序的内存使用接近系统的最大内存使用时,应用会向系统发送内存警告,这时候系统会调用方法向所有ViewController发送内存警告.
2.打开系统相机.
3.加载高清图片.
默认操作:把里面没有用的对象进行释放.

38 介绍响应者链.
当用户点击屏幕,能够产生响应的对象组成的链.
继承自NSResponder,响应者链能够中断.
有些需要打开用户交互才能使用 比如 UILabel 和 UIImageView

39 OC中对象的交互是如何实现的?
消息机制(即调用方法)

40 什么是沙盒?沙盒里包含哪些文件,如何获取文件路径?
沙盒:程序可操作的磁盘空间,系统为之开辟
里面包含了三个文件夹(其中Libaray 包含两个)
1 Documents 文本类型,基本数据 txt,text
2 Library/caches 缓存文件,图片,视频,音频,存储数据量大的
3 Library/Preference 用户偏好设置,单例类 perferences路径无法找到,只能通过NSUserDefaults.
4 tmp 暂存区 半成品,比如没有下载好的视频,音频 下载好后系统会自动执行剪切操作,将tmp里面的东西放到caches里面

文件路径获取方法是
[NSSearchPathForDirectoriesInDomains(9, 1, 1) firstObject];
NSDocumentDirectory = 9 ; 用来查找Documents文件
NSCachesDirectory = 13;用来查找Cacher文件

今天就找到这了 还有找到就继续发出来啊

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值