• IOS面试题--002


    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)自己拥有的实例变量释放掉

     

     

     

  • 相关阅读:
    2019年春季学期第三周作业
    2019春第二周作业+一些的挑战作业
    查找整数
    寒假作业3编辑总结
    寒假作业2编辑总结
    对自己影响最大的老师
    2019春第九周作业
    2019春第八周作业
    2019春第七周作业
    2019春第六周作业
  • 原文地址:https://www.cnblogs.com/xukunhenwuliao/p/3576188.html
Copyright © 2020-2023  润新知