1.深拷贝和浅拷贝的理解?ios
浅拷贝:只是对指针的拷贝,拷贝后两个指针指向同一个内存空间数据库
深拷贝:不但对指针进行拷贝,并且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不一样地址的指针安全
对一个实例进行深拷贝时当前类须要实现NSCopying协议。
网络
浅拷贝是复制出来一个跟原对象是同一地址的对象,而深拷贝则是复制出来一个跟源对象不一样地址的对象,改变原对象,对新对象没有影响。架构
2. 写出方法获取ios内存使用状况。app
void logMemoryInfo()iphone
3. 怎样实现一个singleton的类ide
要实现单例,首先须要一个static的指向类自己的对象,其次须要一个初始化类函数。函数
1)@synchronizedoop
static InstanceClass *instance; + (InstanceClass *)defaultInstance { @synchronized (self){ if (instance == nil) { instance = [[InstanceClass alloc] init]; } } return instance; }
2)GCD
static InstanceClass *instance; + (InstanceClass *)defaultInstance{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[InstanceClass alloc] init]; }); return instance; }
4. 什么是安全释放?
把对象指针置为nil,再对其释放。
5.RunLoop是什么?
runloop是事件接收和分发机制的一个实现,字面上来讲,是线程中的循环
Runloops是线程的基础架构部分。一个runloop就是一个事件处理循环,用来不停的调配工做以及处理输入事件。使用run loop的目的是使你的线程在有工做的时候工做,没有的时候休眠。
每一个线程,包括程序的主线程(main thread)都有与之相应的run loop对象
6. 什么是序列化和反序列化,能够用来作什么?如何在OC中实现复杂对象的存储?
把对象转换为字节序列的过程称为对象的序列化
把字节序列恢复为对象的过程称为对象的反序列化
将对象写到文件或者数据库里,而且能够读取出来
遵循NSCoding协议,来实现复杂对象的存储
实现该协议后就能够对其进行打包或者解包,而后转化为NSData
7.写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?
#define MIN(A,B) ((A)<(B)?(A):(B))
8. iphone os有没有垃圾回收机制?简单阐述一下OC内存管理。
没有 引用计数机制
1:对你本身拥有的对象负责.你只能释放你拥有的对象.
2:凡是你经过retain,alloc,copy等手段得到了全部权的对象,都必须在你再也不使用它的时候,,由你来调 用release,autorelease等手段来释放对它的全部权.
3:在必定的代码段内,对同一个对象所做的copy,alloc和retain的次数应该与autorelease及release的 次数相等;
4:能够在dealloc的方法中释放你所占有的实例变量.
5:对于便利构造器和访问器来讲,你没有经过上述的手段得到对象的全部权,所以在这些状况下你无须对 得到的对象进行额外的释放操做.
6:autorelease只不过意味着预约延迟发送一条release信息.当前的引用计数并无变.
9. 简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?
按Home键进入后台:
- (void)applicationWillResignActive:(UIApplication *)application{}
- (void)applicationDidEnterBackground:(UIApplication *)application{}
从后台回到前台:
- (void)applicationWillEnterForeground:(UIApplication *)application{}
- (void)applicationWillResignActive:(UIApplication *)application{}
10.ViewController 的 alloc,loadView,ViewDidLoad,ViewWillAppear,ViewDidUnload,dealloc,init分别是在何时调用的?在自定义ViewController的时候这几个函数里面应该作什么工做?
alloc:申请内存空间的时候调用.
init:视图初始化的时候,赋一些程序的初始值
LoadView:加载视图的时候调用 self.view != nil的时候,执行loadview,加载一些本身的视图
ViewDidLoad:视图已经加载的时候调用(网络数据之类的,刷新表之类)(添加通知)
ViewWillAppear:视图将要出现的时候
ViewDidUnload:视图已经卸载(数据释放掉)(移除通知)
dealloc:视图已经销毁的时候(self.view = =nil)本身拥有的实例变量释放掉