面試題(2)

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)的控制器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,843評論 0 4
  • JAVA 相關(guān) 1.靜態(tài)內(nèi)部類、內(nèi)部類、匿名內(nèi)部類,為什么內(nèi)部類會持有外部類的引用?持有的引用是this?還是其它...
    starw閱讀 524評論 0 0
  • 1.#import和#include的區(qū)別 @class?@class一般用于頭文件中需要聲明該類的某個實例變量的...
    晚照清舟閱讀 343評論 0 0
  • HTML&CSS 常用那幾種瀏覽器測試?有哪些內(nèi)核(Layout Engine)?(Q1)瀏覽器:IE,Chrom...
    qhaobaba閱讀 437評論 0 1
  • 1、在同一個類A中,有方法a和方法b,方法b如何調(diào)用方法a ? [self a]; 即讓類A本身去調(diào)用(在b方法里...
    勤勞的小男生閱讀 341評論 0 1

友情鏈接更多精彩內(nèi)容