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.深拷贝和浅拷贝的理解
详细内容参见已写博文
3. 怎样实现一个singleton的类。
void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);
该函数接收一个dispatch_once用于检查该代码块是否已经被调度的谓词(是一个长整型,实际上作为BOOL使用)。它还接收一个希望在应用的生命周期内仅被调度一次的代码块,对于本例就用于shared实例的实例化。
dispatch_once不仅意味着代码仅会被运行一次,而且还是线程安全的,这就意味着你不需要使用诸如@synchronized之类的来防止使用多个线程或者队列时不同步的问题。
Apple的GCD Documentation证实了这一点:
如果被多个线程调用,该函数会同步等等直至代码块完成。
在.m文件里这样写:
+ (MyObject *)shareMyObject
{
//单列的另一种写法
static MyObject * myObject = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
myObject = [[MyObject alloc] init];
});
return myObject;
}
4. 什么是安全释放?
<span style="font-family:SimSun;font-size:18px;">答:把对象指针置为nil,再对其释放。</span>
<span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">5. RunLoop是什么?</span><span style="font-family:arial, courier new, courier, 宋体, monospace;"> </span>
6.什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?
<span style="font-family:SimSun;font-size:18px;">把对象转换为字节序列的过程称为对象的序列化</span>
<span style="font-family:SimSun;font-size:18px;">把字节序列恢复为对象的过程称为对象的反序列化将对象写到文件或者数据库里,并且可以读取出来遵循NSCoding协议,来实现复杂对象的存储</span>
<span style="font-family:SimSun;font-size:18px;">实现该协议后就可以对其进行打包或者解包,然后转化为NSData</span>
<span style="font-family:SimSun;font-size:18px;">7.写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?</span>
#define MINVALUE(A, B) (A)<(B)?(A):(B)
8.iPhone OS有没有垃圾回收机制?简单阐述一下OC内存管理。
没有垃圾回收机制,OC是通过引用计数来管理内存的<span style="font-family:SimSun;font-size:18px;">9.简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?</span>
<span style="font-family:SimSun;font-size:18px;">进入后台时,会调用:</span>
<pre name="code" class="objc"><span style="font-family:SimSun;font-size:18px;">- (void)applicationWillResignActive:(UIApplication *)application { } - (void)applicationDidEnterBackground:(UIApplication *)application { }</span>
进入前台时会调用:
<span style="font-size:18px;">- (void)applicationWillEnterForeground:(UIApplication *)application
{
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
}</span>
10. ViewController 的 alloc,loadView,viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?
<ul><li><span style="font-family: SimSun;font-size:18px;">alloc申请内存时调用</span></li><li><span style="font-family: SimSun;font-size:18px;">loadView加载视图时调用</span></li><li><span style="font-family: SimSun;font-size:18px;">ViewDidLoad视图已经加载后调用</span></li><li><span style="font-family: SimSun;font-size:18px;">ViewWillAppear视图将要出现时调用</span></li><li><span style="font-family: SimSun;font-size:18px;">ViewDidUnload视图已经加载但没有加载出来调用</span></li><li><span style="font-family: SimSun;font-size:18px;">dealloc销毁该视图时调用</span></li><li><span style="font-family: SimSun;font-size:18px;"> init视图初始化时候调用,使用初始化方法是不会调用loadView和viewDidLoad,当使用到self.view时才会调用这两个方法</span></li></ul>
<span style="font-family:SimSun;font-size:18px;">1. 程序入口main函数创建UIApplication实例和UIApplication代理实例。</span>
2. 在UIApplication代理实例中重写启动方法,设置根ViewController。
3. 在第一ViewController中添加控件,实现应用程序界面。