iOS面試題二

1.深拷貝和淺拷貝的理解?ios

淺拷貝:只是對指針的拷貝,拷貝後兩個指針指向同一個內存空間數據庫

深拷貝:不但對指針進行拷貝,並且對指針指向的內容進行拷貝,經深拷貝後的指針是指向兩個不一樣地址的指針安全


對一個實例進行深拷貝時當前類須要實現NSCopying協議。
網絡

淺拷貝是複製出來一個跟原對象是同一地址的對象,而深拷貝則是複製出來一個跟源對象不一樣地址的對象,改變原對象,對新對象沒有影響。架構


2. 寫出方法獲取ios內存使用狀況。app

void logMemoryInfo()iphone

  

3. 怎樣實現一個singleton的類ide

要實現單例,首先須要一個static的指向類自己的對象,其次須要一個初始化類函數。函數

1)@synchronizedoop

static InstanceClass *instance;
+ (InstanceClass *)defaultInstance {
        @synchronized (self){
            if (instance == nil) {
                instance = [[InstanceClass alloc] init];
            }
        }
        return instance; 
}

2)GCD

static InstanceClass *instance;
+ (InstanceClass *)defaultInstance{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[InstanceClass alloc] init];
    });
    return instance;
}

 

4. 什麼是安全釋放?


把對象指針置爲nil,再對其釋放。


5.RunLoop是什麼?


runloop是事件接收和分發機制的一個實現,字面上來講,是線程中的循環

Runloops是線程的基礎架構部分。一個runloop就是一個事件處理循環,用來不停的調配工做以及處理輸入事件。使用run loop的目的是使你的線程在有工做的時候工做,沒有的時候休眠。

每一個線程,包括程序的主線程(main thread)都有與之相應的run loop對象


6. 什麼是序列化和反序列化,能夠用來作什麼?如何在OC中實現複雜對象的存儲?


把對象轉換爲字節序列的過程稱爲對象的序列化

把字節序列恢復爲對象的過程稱爲對象的反序列化

將對象寫到文件或者數據庫裏,而且能夠讀取出來

遵循NSCoding協議,來實現複雜對象的存儲

實現該協議後就能夠對其進行打包或者解包,而後轉化爲NSData


7.寫一個標準宏MIN,這個宏輸入兩個參數並返回較小的一個?

#define MIN(A,B) ((A)<(B)?(A):(B))



8. iphone os有沒有垃圾回收機制?簡單闡述一下OC內存管理。

沒有   引用計數機制

    1:對你本身擁有的對象負責.你只能釋放你擁有的對象.

    2:凡是你經過retain,alloc,copy等手段得到了全部權的對象,都必須在你再也不使用它的時候,,由你來調          用release,autorelease等手段來釋放對它的全部權.

    3:在必定的代碼段內,對同一個對象所做的copy,allocretain的次數應該與autoreleaserelease的         次數相等;

    4:能夠在dealloc的方法中釋放你所佔有的實例變量.

    5:對於便利構造器和訪問器來講,你沒有經過上述的手段得到對象的全部權,所以在這些狀況下你無須對        得到的對象進行額外的釋放操做.

    6:autorelease只不過意味着預約延遲發送一條release信息.當前的引用計數並無變.


9. 簡述應用程序按Home鍵進入後臺時的生命週期,以及從後臺回到前臺時的生命週期?


Home鍵進入後臺:

- (void)applicationWillResignActive:(UIApplication *)application{}

- (void)applicationDidEnterBackground:(UIApplication *)application{}

從後臺回到前臺:

- (void)applicationWillEnterForeground:(UIApplication *)application{}

- (void)applicationWillResignActive:(UIApplication *)application{}


10.ViewController alloc,loadView,ViewDidLoad,ViewWillAppear,ViewDidUnload,dealloc,init分別是在何時調用的?在自定義ViewController的時候這幾個函數裏面應該作什麼工做?


alloc:申請內存空間的時候調用.

init:視圖初始化的時候,賦一些程序的初始值

LoadView:加載視圖的時候調用  self.view != nil的時候,執行loadview,加載一些本身的視圖

ViewDidLoad:視圖已經加載的時候調用(網絡數據之類的,刷新表之類)(添加通知)

ViewWillAppear:視圖將要出現的時候

ViewDidUnload:視圖已經卸載(數據釋放掉)(移除通知)

dealloc:視圖已經銷燬的時候(self.view = =nil)本身擁有的實例變量釋放掉

相關文章
相關標籤/搜索