面试题(2)

1、写出方法获取ios内存使用情况。(不用看, 看了也写不出来)

// 获取当前设备可用内存及所占内存的头文件

#impor

t#import

// 获取当前设备可用内存(单位: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;

}

1,深拷贝和浅拷贝的理解?

深拷贝拷贝的是内容,浅拷贝拷贝的是指针。深拷贝和浅拷贝最大的区别就是子类对象的地址是否改变,如果子类对象的地址改变那么就是深拷贝。

2、怎样实现一个singleton的类。

+ (LOSingleton *) sharedInstance{    

static  LOSingleton *sharedInstance = nil ;    

static  dispatch_once_t onceToken;  // 锁    

dispatch_once (& onceToken, ^ {    // 最多调用一次        

sharedInstance = [[LOSingleton  alloc] init];    

});    

return  sharedInstance;

}

3、什么是安全释放?

在对象dealloc之后把指针置为nil

2,RunLoop是什么?

一个RunLoop就是一个事件处理的循环,用来不停的调度工作以及处理输入时间。使用runloop的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。runloop的设计是为了减少cpu无谓的空转。每个开辟的线程都有一个Runloop, 主线程的Runloop时默认开启的, 咱们手动开辟的子线程Runloop是默认不开启的, 如果需要开启, 需要调用API[[NSRunloop  currentRunloop] run]开启.最常见的需要开启Runloop的是在子线程里面调用计时器(NSTimer), 如果不开启runloop循环方法就不能正常执行.

3,什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?

如果你需要存储一个复杂的对象的话,经常要以二进制的方法序列化这个对象,这个过程叫Archiving。如果一个对象需要进行序列化,那么需要遵循NScoding协议,主要有两个方法:-(id)initWithCoder:(NSCoder*)coder;//从coder中读取数据,保存到相应变量中,即反序列化数据。-(void)encodeWithCoder:(NSCoder*)coder;//读取实例变量,并把这些数据写到coder中去,即序列化数据。

4,写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?

#define kMIN(X,Y)  ((X)  > (Y)) ? (Y) :(X) 

5,iphone os有没有垃圾回收机制?简单阐述一下OC内存管理。

iphone os没有垃圾回收机制。垃圾回收机制用于在空闲时间以不定时的方式动态的回收无任何引用的对象占据的内存空间。OC内存管理机制看第一套题. 

6,简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?

进入后台生命周期走:

- (void)applicationWillResignActive:(UIApplication *)application;

- (void)applicationDidEnterBackground:(UIApplication *)application;

回到前台生命周期走:

- (void)applicationWillEnterForeground:(UIApplication *)application;

- (void)applicationDidBecomActive:(UIApplication *)application;

7,ViewController 的 alloc,loadView, viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作? 

 alloc初始化当前的ViewController 

loadView:没有正在使用nib视图页面,子类将会创建自己的自定义视图层

viewDidLoad:试图被加载后调用

viewWillAppear:试图即将出现的时候调用

viewDidUnload: 当系统内存吃紧的时候会调用该方法,释放掉当前未在window中显示的试图和对应的控制器

你可能感兴趣的:(面试题(2))