IOS面试题--002

来源:互联网 发布:ori什么软件 编辑:程序博客网 时间:2024/05/01 03:20

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;

} 另外可以使用GCDonce模式

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,allocretain的次数应该与autoreleaserelease的次数相等;

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 allocloadView,viewDidLoad,viewWillAppear,viewDidUnload,deallocinit分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?

Alloc 申请内存空间的时候调用.

 

Init视图初始化的时候,赋一些程序的初始值

 

LoadView加载视图的时候调用  self.view != nil的时候,执行loadview,加载一些自己的视图

 

ViewDidLoad视图已经加载的时候调用(网络数据之类的,刷新表之类)(添加通知)

 

ViewWillAppear视图将要出现的时候

 

ViewDidUnload视图已经卸载(数据释放掉)(移除通知)

 

Dealloc视图已经销毁的时候(self.view = =nil)自己拥有的实例变量释放掉

 

 

 

0 0
原创粉丝点击