1、 写出方法获取ios内存使用情况。
答:使用Xcode内嵌的instruments软件
2、 深拷贝和浅拷贝的理解?
http://blog.csdn.net/u013082522/article/details/19932977参见本博客
3、 怎样实现一个singleton的类。
.h文件
@interface Singleton : NSObject
@property(nonatomic,assign)int a;
+(Singleton *)shareSingleton;
.m文件
@implementation Singleton
static Singleton *instance = nil;
+(Singleton *)shareSingleton
{
@synchronized(self){
if(instance != nil){
returnself;
}
instance= [[Singleton alloc] init];
}
return instance;
} 另外可以使用GCD的once模式
4、 什么是安全释放?
先释放. 再将对象的指针置为nil,
5、 RunLoop是什么?
运行循环.(不停的循环)
每个线程,包括程序的主线程(main thread)都有与之相应的run loop对象。
在任何一个Cocoa程序的线程中,都可以通过:
NSRunLoop *runloop =[NSRunLoopcurrentRunLoop];获得当前的runloop对象.
主线程的run loop默认是启动的。
子线程中如果没有开启runloop,在子线程中设定NSTimer,只会执行一次.因为子线程的runloop没有打开.
在子线程的事件监听包括通知,按钮点击,也不执行
6、 什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?
什么是序列化与反序列化???归档和反归档.转化为NSDATA
序列化和反序列化,我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用。
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
7、 写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?
#defineMIN(A,B) ((A) <= (B) (A) : (B))
8、 iphone os有没有垃圾回收机制?简单阐述一下OC内存管理。
没有垃圾回收体制.mac OS有垃圾回收体制.
1:对你自己拥有的对象负责.你只能释放你拥有的对象.
2:凡是你通过retain,alloc,copy等手段获得了所有权的对象,都必须在你不再使用它的时候,,由你来调用release,autorelease等手段来释放对它的所有权.
3:在一定的代码段内,对同一个对象所作的copy,alloc和retain的次数应该与autorelease及release的次数相等;
4:可以在dealloc的方法中释放你所占有的实例变量.
5:对于便利构造器和访问器来说,你没有通过上述的手段获得对象的所有权,因此在这些情况下你无须对获得的对象进行额外的释放操作.
6:autorelease只不过意味着预定延迟发送一条release信息.当前的引用计数并没有变.
9、 简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?
-(void)applicationWillResignActive:(UIApplication*)application
-(void)applicationDidEnterBackground:(UIApplication *)application
后者进行的方法有
-(void)applicationWillEnterForeground:(UIApplication *)application
- (void)applicationWillBecomeActive:(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)自己拥有的实例变量释放掉