1、寫出方法獲取ios內(nè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ū)別就是子類對象的地址是否改變,如果子類對象的地址改變那么就是深拷貝。
2、怎樣實現(xiàn)一個singleton的類。
+ (LOSingleton *) sharedInstance{? ??
static? LOSingleton *sharedInstance = nil ;? ??
static? dispatch_once_t onceToken; ?// 鎖? ??
dispatch_once (& onceToken, ^ {? ? // 最多調(diào)用一次? ? ? ??
sharedInstance = [[LOSingleton? alloc] init];? ??
});? ??
return? sharedInstance;
}
3、什么是安全釋放?
在對象dealloc之后把指針置為nil
2,RunLoop是什么?
一個RunLoop就是一個事件處理的循環(huán),用來不停的調(diào)度工作以及處理輸入時間。使用runloop的目的是讓你的線程在有工作的時候忙于工作,而沒工作的時候處于休眠狀態(tài)。runloop的設(shè)計是為了減少cpu無謂的空轉(zhuǎn)。每個開辟的線程都有一個Runloop, 主線程的Runloop時默認(rèn)開啟的, 咱們手動開辟的子線程Runloop是默認(rèn)不開啟的, 如果需要開啟, 需要調(diào)用API[[NSRunloop? currentRunloop] run]開啟.最常見的需要開啟Runloop的是在子線程里面調(diào)用計時器(NSTimer), 如果不開啟runloop循環(huán)方法就不能正常執(zhí)行.
3,什么是序列化和反序列化,可以用來做什么?如何在OC中實現(xiàn)復(fù)雜對象的存儲?
如果你需要存儲一個復(fù)雜的對象的話,經(jīng)常要以二進(jìn)制的方法序列化這個對象,這個過程叫Archiving。如果一個對象需要進(jìn)行序列化,那么需要遵循NScoding協(xié)議,主要有兩個方法:-(id)initWithCoder:(NSCoder*)coder;//從coder中讀取數(shù)據(jù),保存到相應(yīng)變量中,即反序列化數(shù)據(jù)。-(void)encodeWithCoder:(NSCoder*)coder;//讀取實例變量,并把這些數(shù)據(jù)寫到coder中去,即序列化數(shù)據(jù)。
4,寫一個標(biāo)準(zhǔn)宏MIN,這個宏輸入兩個參數(shù)并返回較小的一個?
#define kMIN(X,Y)? ((X)? > (Y)) ? (Y) :(X)?
5,iphone os有沒有垃圾回收機制?簡單闡述一下OC內(nèi)存管理。
iphone os沒有垃圾回收機制。垃圾回收機制用于在空閑時間以不定時的方式動態(tài)的回收無任何引用的對象占據(jù)的內(nèi)存空間。OC內(nèi)存管理機制看第一套題.?
6,簡述應(yīng)用程序按Home鍵進(jìn)入后臺時的生命周期,以及從后臺回到前臺時的生命周期?
進(jìn)入后臺生命周期走:
- (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分別是在什么時候調(diào)用的?在自定義ViewController的時候這幾個函數(shù)里面應(yīng)該做什么工作??
?alloc初始化當(dāng)前的ViewController?
loadView:沒有正在使用nib視圖頁面,子類將會創(chuàng)建自己的自定義視圖層
viewDidLoad:試圖被加載后調(diào)用
viewWillAppear:試圖即將出現(xiàn)的時候調(diào)用
viewDidUnload:<iOS6之后廢棄> 當(dāng)系統(tǒng)內(nèi)存吃緊的時候會調(diào)用該方法,釋放掉當(dāng)前未在window中顯示的試圖和對應(yīng)的控制器