1确虱、寫出方法獲取ios內(nèi)存使用情況入客。(不用看, 看了也寫不出來(lái))
// 獲取當(dāng)前設(shè)備可用內(nèi)存及所占內(nèi)存的頭文件
#impor
t#import
// 獲取當(dāng)前設(shè)備可用內(nèi)存(單位: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;
}
// 獲取當(dāng)前任務(wù)所占用的內(nèi)存(單位: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译红,深拷貝和淺拷貝的理解蝎亚?
深拷貝拷貝的是內(nèi)容蚕甥,淺拷貝拷貝的是指針舌镶。深拷貝和淺拷貝最大的區(qū)別就是子類對(duì)象的地址是否改變糊啡,如果子類對(duì)象的地址改變那么就是深拷貝拄查。
2、怎樣實(shí)現(xiàn)一個(gè)singleton的類棚蓄。
+ (LOSingleton *) sharedInstance{? ??
static? LOSingleton *sharedInstance = nil ;? ??
static? dispatch_once_t onceToken; ?// 鎖? ??
dispatch_once (& onceToken, ^ {? ? // 最多調(diào)用一次? ? ? ??
sharedInstance = [[LOSingleton? alloc] init];? ??
});? ??
return? sharedInstance;
}
3堕扶、什么是安全釋放?
在對(duì)象dealloc之后把指針置為nil
2癣疟,RunLoop是什么挣柬?
一個(gè)RunLoop就是一個(gè)事件處理的循環(huán),用來(lái)不停的調(diào)度工作以及處理輸入時(shí)間睛挚。使用runloop的目的是讓你的線程在有工作的時(shí)候忙于工作,而沒工作的時(shí)候處于休眠狀態(tài)邪蛔。runloop的設(shè)計(jì)是為了減少cpu無(wú)謂的空轉(zhuǎn)。每個(gè)開辟的線程都有一個(gè)Runloop, 主線程的Runloop時(shí)默認(rèn)開啟的, 咱們手動(dòng)開辟的子線程Runloop是默認(rèn)不開啟的, 如果需要開啟, 需要調(diào)用API[[NSRunloop? currentRunloop] run]開啟.最常見的需要開啟Runloop的是在子線程里面調(diào)用計(jì)時(shí)器(NSTimer), 如果不開啟runloop循環(huán)方法就不能正常執(zhí)行.
3扎狱,什么是序列化和反序列化侧到,可以用來(lái)做什么?如何在OC中實(shí)現(xiàn)復(fù)雜對(duì)象的存儲(chǔ)淤击?
如果你需要存儲(chǔ)一個(gè)復(fù)雜的對(duì)象的話匠抗,經(jīng)常要以二進(jìn)制的方法序列化這個(gè)對(duì)象,這個(gè)過程叫Archiving污抬。如果一個(gè)對(duì)象需要進(jìn)行序列化汞贸,那么需要遵循NScoding協(xié)議绳军,主要有兩個(gè)方法:-(id)initWithCoder:(NSCoder*)coder;//從coder中讀取數(shù)據(jù),保存到相應(yīng)變量中矢腻,即反序列化數(shù)據(jù)门驾。-(void)encodeWithCoder:(NSCoder*)coder;//讀取實(shí)例變量,并把這些數(shù)據(jù)寫到coder中去多柑,即序列化數(shù)據(jù)奶是。
4,寫一個(gè)標(biāo)準(zhǔn)宏MIN竣灌,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)聂沙?
#define kMIN(X,Y)? ((X)? > (Y)) ? (Y) :(X)?
5,iphone os有沒有垃圾回收機(jī)制初嘹?簡(jiǎn)單闡述一下OC內(nèi)存管理及汉。
iphone os沒有垃圾回收機(jī)制。垃圾回收機(jī)制用于在空閑時(shí)間以不定時(shí)的方式動(dòng)態(tài)的回收無(wú)任何引用的對(duì)象占據(jù)的內(nèi)存空間屯烦。OC內(nèi)存管理機(jī)制看第一套題.?
6豁生,簡(jiǎn)述應(yīng)用程序按Home鍵進(jìn)入后臺(tái)時(shí)的生命周期,以及從后臺(tái)回到前臺(tái)時(shí)的生命周期漫贞?
進(jìn)入后臺(tái)生命周期走:
- (void)applicationWillResignActive:(UIApplication *)application;
- (void)applicationDidEnterBackground:(UIApplication *)application;
回到前臺(tái)生命周期走:
- (void)applicationWillEnterForeground:(UIApplication *)application;
- (void)applicationDidBecomActive:(UIApplication *)application;
7,ViewController 的 alloc育叁,loadView, viewDidLoad,viewWillAppear,viewDidUnload,dealloc迅脐、init分別是在什么時(shí)候調(diào)用的?在自定義ViewController的時(shí)候這幾個(gè)函數(shù)里面應(yīng)該做什么工作豪嗽??
?alloc初始化當(dāng)前的ViewController?
loadView:沒有正在使用nib視圖頁(yè)面谴蔑,子類將會(huì)創(chuàng)建自己的自定義視圖層
viewDidLoad:試圖被加載后調(diào)用
viewWillAppear:試圖即將出現(xiàn)的時(shí)候調(diào)用
viewDidUnload:<iOS6之后廢棄> 當(dāng)系統(tǒng)內(nèi)存吃緊的時(shí)候會(huì)調(diào)用該方法,釋放掉當(dāng)前未在window中顯示的試圖和對(duì)應(yīng)的控制器