當前位置:成語大全網 - 書法字典 - iOS面試有哪些技術難點?

iOS面試有哪些技術難點?

1.什麽是arc?(arc的誕生是為了解決什麽問題?)

首先,說明ARC:自動參考計數。

幾個弧點:

創建對象時的保留計數+1,釋放對象時的保留計數-1。當保留計數為0時,對象被銷毀。

Autorelease方法將自動添加到程序中添加了autoreleasepool的對象中。如果對象的引用計數為0,它將被銷毀。

那麽ARC的誕生是為了解決什麽問題呢?這要追溯到MRC手動內存管理的時代。

MRC下內存管理的缺點:

1.當我們想要釋放壹個堆內存時,我們必須首先確保指向這個堆空間的指針已經被釋放。(避免提前發布)

2.要釋放指針所指向的堆空間,首先要確定哪些指針指向同壹個堆,這些指針只能釋放壹次。(MRC下,誰創建誰發布,避免重復發布。)

3.在模塊化操作中,對象可能被多個模塊創建和使用,最終由誰來釋放是不確定的。

4.多線程的時候,最後哪個線程會用完是不確定的。

2.請解釋以下關鍵詞的區別:賦值vs弱,_ _塊vs _ _弱。

Assign適用於基本數據類型,weak適用於NSObject對象,它是壹個弱引用。

第_ _塊用於修改壹個變量,這個變量可以在塊中修改(參考塊實現原理)。

__block:用__block修飾的變量將被保留(塊代碼express中的ARC(在ARC下,不在MRC下))。

__weak:用__weak修飾的變量不會保留在塊代碼塊中。

同時,在ARC下,需要避免(self) WeakSelf = self的block _ _ WeakTyped的循環引用;

3._ _ block在圓弧和非圓弧下的意思壹樣嗎?

不壹樣。

在MRC中,__block變量在塊中使用時不會被保留。

但是弧中_ _塊將被保留。

而是使用__weak或__unsafe_unretained來更準確地描述弱引用的用途。

前者只能在iOS5之後使用,但是更好(對象釋放後,這個指針會自動設置為nil)。

後者是在ARC環境下兼容4.x的解決方案。

所以在上面的例子中,

_ _ block my class * temp =…;//在MRC環境中使用__weak MyClass* temp = …;// ARC但只支持iOS5.0以上版本_ _ unsafe _ retained my class * temp =…;//ARC並且可以兼容4.x以後的版本。

4.使用非原子是線程安全的嗎?()

不是這樣的。

原子的原子操作,系統會鎖定setter方法。使用@synchronized(self){//code}

Nonatomic不會鎖定setter方法。

Atomic:線程安全,需要消耗大量系統資源來鎖定屬性。

非原子:非線程安全,適用於內存小的移動設備。

5.描述壹個您遇到的保留周期的例子。

塊中的循環引用:viewController

@property (nonatomic,strong)http request handler * handler;@property(非原子,強)NSData * data_ handler =[http request handler shared manager];[downloaddata:^(id response data]{ _ data = response data;}];

Self擁有_handler,_handler擁有block,block擁有self(由於使用了self的_data屬性,所以block會復制self的壹個副本)。

解決方案:

_ _弱類型of(self)weak self = self[downloaddata:^(id response data]{ weak self . data = response data;}];

6.+(空)荷載;+(void)初始化;有什麽用?

在Objective-C中,運行時自動調用每個類的兩個方法。初始加載類時會調用+load,第壹次調用類的類方法或實例方法前會調用+initialize。這兩個方法是可選的,只有在實現時才會被調用。

* * *相同點:兩種方法都只會調用壹次。