關(guān)于ios的面試題解答
1. struct和class的區(qū)別
swift中,class是引用類型,struct是值類型。值類型在傳遞和賦值時將進行復(fù)制,而引用類型則只會使用引用對象的一個“指向”。所以他們兩者之間的區(qū)別就是兩個類型的區(qū)別。
class有這幾個功能struct沒有的:
class可以繼承,這樣子類可以使用父類的特性和方法
類型轉(zhuǎn)換可以在runtime的時候檢查和解釋一個實例的類型
可以用deinit來釋放資源
一個類可以被多次引用
struct也有這樣幾個優(yōu)勢:
結(jié)構(gòu)較小,適用于復(fù)制操作,相比于一個class的實例被多次引用更加安全
無須擔心內(nèi)存memory leak或者多線程沖突問題
順便提一下,array在swift中是用struct實現(xiàn)的。Apple重寫過一次array,然后復(fù)制就是深度拷貝了。猜測復(fù)制是類似參照那樣,通過棧上指向堆上位置的指針來實現(xiàn)的。而對于它的復(fù)制操作,也是在相對空間較為寬裕的堆上來完成的,所以性能上還是不錯的。
下面引用貓神OneV的博客:
var arr = [0,0,0]
var newArr = arr
arr[0] = 1
//Check arr and newArr
arr //[1, 0, 0]
newArr // before beta3:[1, 0, 0], after beta3:[0, 0, 0]
所以可以猜測其實在背后 Array和 Dictionary的行為并不是像其他 struct 那樣簡單的在棧上分配,而是類似參照那樣,通過棧上指向堆上位置的指針來實現(xiàn)的。而對于它的復(fù)制操作,也是在相對空間較為寬裕的堆上來完成的。當然,現(xiàn)在還無法(或者說很難)拿到最后的匯編碼,所以這只是一個猜測而已。
補充: C語言中,struct與的class的區(qū)別:struct只是作為一種復(fù)雜數(shù)據(jù)類型定義,不能用于面向?qū)ο?a href='http://www.wenjunhu.com/v/tag/1315/' target='_blank' class='arckwlink_none'>編程。
C++中,struct和class的區(qū)別:對于成員訪問權(quán)限以及繼承方式,class中默認的是private的,而struct中則是public的。class還可以用于表示模板類型,struct則不行。
2. 介紹一下觀察者模式
觀察者模式(Observer Pattern):定義對象間的一種一對多依賴關(guān)系,使得每當一個對象狀態(tài)發(fā)生改變時,其相關(guān)依賴對象皆得到通知并被自動更新。在IOS中典型的推模型實現(xiàn)方式為NSNotificationCenter和KVO。
NSNotificationCenter
觀察者Observer,通過NSNotificationCenter的addObserver:selector:name:object接口來注冊對某一類型通知感興趣。在注冊時候一定要注意,NSNotificationCenter不會對觀察者進行引用計數(shù)+1的操作,我們在程序中釋放觀察者的時候,一定要去報從center中將其注銷了。
通知中心NSNotificationCenter,通知的樞紐。
被觀察的對象,通過postNotificationName:object:userInfo:發(fā)送某一類型通知,廣播改變。
通知對象NSNotification,當有通知來的時候,Center會調(diào)用觀察者注冊的接口來廣播通知,同時傳遞存儲著更改內(nèi)容的NSNotification對象。
KVO
KVO的全稱是Key-Value Observer,即鍵值觀察。是一種沒有中心樞紐的觀察者模式的實現(xiàn)方式。一個主題對象管理所有依賴于它的觀察者對象,并且在自身狀態(tài)發(fā)生改變的時候主動通知觀察者對象。
注冊觀察者[object addObserver:self forKeyPath:property options:NSKeyValueObservingOptionNew context:]。
更改主題對象屬性的值,即觸發(fā)發(fā)送更改的通知。
在制定的回調(diào)函數(shù)中,處理收到的更改通知。
注銷觀察者 [object removeObserver:self forKeyPath:property]。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
關(guān)于ios的面試題解答下載
相關(guān)電子資料下載
- iOS17.1可能明天發(fā)布,iOS17.1主要修復(fù)哪些問題? 377
- 華為全新鴻蒙蓄勢待發(fā) 僅支持鴻蒙內(nèi)核和鴻蒙系統(tǒng)應(yīng)用 719
- 蘋果手機系統(tǒng)iOS 17遭用戶質(zhì)疑 731
- iPhone12輻射超標?蘋果推送iOS 17.1解決此事 750
- 傳華為囤積零部件 目標明年智能手機出貨7000萬部;消息稱 MiOS 僅限國內(nèi),小米 28208
- 蘋果推送iOS17.0.3,解決iPhone15Pro系列存在機身過熱 216
- Testin云測兼容和真機服務(wù)平臺中上線iPhone 15系列手機 208
- 利爾達推出搭載HooRiiOS的Matter模組 145
- 運放參數(shù)解析:輸入偏置電流(Ibias)和失調(diào)電流(Ios) 128
- 昆侖太科發(fā)布支持國產(chǎn)飛騰騰銳D2000芯片的開源BIOS固件版本 448