iOS 面试题总结 (三)

1 写出方法获取ios内存使用情况。
// 获取当前设备可用内存及所占内存的头文件

#import <sys/sysctl.h>

#import <mach/mach.h>


// 获取当前设备可用内存(单位:MB)

- (double)availableMemory

{

  vm_statistics_data_t vmStats;

  mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;

  kern_return_t kernReturn = host_statistics(mach_host_self(), 

                                             HOST_VM_INFO, 

                                             (host_info_t)&vmStats, 

                                             &infoCount);

  

  if (kernReturn != KERN_SUCCESS) {

    return NSNotFound;

  }

 return ((vm_page_size *vmStats.free_count) / 1024.0) / 1024.0;

}


// 获取当前任务所占用的内存(单位:MB)

- (double)usedMemory

{

  task_basic_info_data_t taskInfo;

  mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;

  kern_return_t kernReturn = task_info(mach_task_self(), 

                                       TASK_BASIC_INFO, 

                                       (task_info_t)&taskInfo, 

                                       &infoCount);


  if (kernReturn != KERN_SUCCESS  ) {

     return NSNotFound;

}

return taskInfo.resident_size / 1024.0 / 1024.0;

}

2    深拷贝和浅拷贝的理解?

用一句简单的话来说就是:  浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间;深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。系统默认的浅拷贝。想要实现深拷贝需要自己遵守NSCopying协议和NSMutableCopying协议并且重写方法。

3   怎样实现一个singleton的类

+ (Singleton *)sharedInstance

{

    static  Singleton *_instance;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        _instance = [[self alloc] init];

    });

    return _instance;

}

详见

4   什么是安全释放?

创建的对象的引用计数为0 ,并且销毁指针

5  RunLoop是什么

RunLoop从字面上看是运行循环的意思,这一点也不错,它确实就是一个循环的概念,或者准确的说是线程中的循环。 如果说有些程序是一个圈,这个圈本质上就是这里的所谓的RunLoop,就是一个循环,只是这个循环里加入很多特性。 

首先循环体的开始需要检测是否有需要处理的事件,如果有则去处理,如果没有则进入睡眠以节省CPU时间。

另外RunLoop中还有一个运行模式的概念,每一个运行循环必然运行在某个模式下,而模式的存在是为了过滤事件源和观察者的,只有那些和当前 RunLoop运行模式一致的事件源和观察者才会被激活。

每一个线程都有其对应的RunLoop,但是默认非主线程的RunLoop是没有运行的,需要为RunLoop添加至少一个事件源,然后去run它。一般情况下我们是没有必要去启用线程的RunLoop的,除非你在一个单独的线程中需要长久的检测某个事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值