在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

關(guān)于ios的面試題解答

大小:0.6 MB 人氣: 2017-09-26 需要積分:1

  1. struct和class的區(qū)別

  swift中,class是引用類型,struct是值類型。值類型在傳遞和賦值時(shí)將進(jìn)行復(fù)制,而引用類型則只會(huì)使用引用對(duì)象的一個(gè)“指向”。所以他們兩者之間的區(qū)別就是兩個(gè)類型的區(qū)別。

  class有這幾個(gè)功能struct沒有的:

  class可以繼承,這樣子類可以使用父類的特性和方法

  類型轉(zhuǎn)換可以在runtime的時(shí)候檢查和解釋一個(gè)實(shí)例的類型

  可以用deinit來釋放資源

  一個(gè)類可以被多次引用

  struct也有這樣幾個(gè)優(yōu)勢(shì):

  結(jié)構(gòu)較小,適用于復(fù)制操作,相比于一個(gè)class的實(shí)例被多次引用更加安全

  無須擔(dān)心內(nèi)存memory leak或者多線程沖突問題

  順便提一下,array在swift中是用struct實(shí)現(xiàn)的。Apple重寫過一次array,然后復(fù)制就是深度拷貝了。猜測(cè)復(fù)制是類似參照那樣,通過棧上指向堆上位置的指針來實(shí)現(xiàn)的。而對(duì)于它的復(fù)制操作,也是在相對(duì)空間較為寬裕的堆上來完成的,所以性能上還是不錯(cuò)的。

  下面引用貓神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]

  所以可以猜測(cè)其實(shí)在背后 Array和 Dictionary的行為并不是像其他 struct 那樣簡單的在棧上分配,而是類似參照那樣,通過棧上指向堆上位置的指針來實(shí)現(xiàn)的。而對(duì)于它的復(fù)制操作,也是在相對(duì)空間較為寬裕的堆上來完成的。當(dāng)然,現(xiàn)在還無法(或者說很難)拿到最后的匯編碼,所以這只是一個(gè)猜測(cè)而已。

  補(bǔ)充: C語言中,struct與的class的區(qū)別:struct只是作為一種復(fù)雜數(shù)據(jù)類型定義,不能用于面向?qū)ο?a href='http://m.xsypw.cn/v/tag/1315/' target='_blank' class='arckwlink_none'>編程

  C++中,struct和class的區(qū)別:對(duì)于成員訪問權(quán)限以及繼承方式,class中默認(rèn)的是private的,而struct中則是public的。class還可以用于表示模板類型,struct則不行。

  2. 介紹一下觀察者模式

  觀察者模式(Observer Pattern):定義對(duì)象間的一種一對(duì)多依賴關(guān)系,使得每當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變時(shí),其相關(guān)依賴對(duì)象皆得到通知并被自動(dòng)更新。在IOS中典型的推模型實(shí)現(xiàn)方式為NSNotificationCenter和KVO。

  NSNotificationCenter

  關(guān)于ios的面試題解答

  觀察者Observer,通過NSNotificationCenter的addObserver:selector:name:object接口來注冊(cè)對(duì)某一類型通知感興趣。在注冊(cè)時(shí)候一定要注意,NSNotificationCenter不會(huì)對(duì)觀察者進(jìn)行引用計(jì)數(shù)+1的操作,我們?cè)诔绦蛑嗅尫庞^察者的時(shí)候,一定要去報(bào)從center中將其注銷了。

  通知中心NSNotificationCenter,通知的樞紐。

  被觀察的對(duì)象,通過postNotificationName:object:userInfo:發(fā)送某一類型通知,廣播改變。

  通知對(duì)象NSNotification,當(dāng)有通知來的時(shí)候,Center會(huì)調(diào)用觀察者注冊(cè)的接口來廣播通知,同時(shí)傳遞存儲(chǔ)著更改內(nèi)容的NSNotification對(duì)象。

  KVO

  KVO的全稱是Key-Value Observer,即鍵值觀察。是一種沒有中心樞紐的觀察者模式的實(shí)現(xiàn)方式。一個(gè)主題對(duì)象管理所有依賴于它的觀察者對(duì)象,并且在自身狀態(tài)發(fā)生改變的時(shí)候主動(dòng)通知觀察者對(duì)象。

  注冊(cè)觀察者[object addObserver:self forKeyPath:property options:NSKeyValueObservingOptionNew context:]。

  更改主題對(duì)象屬性的值,即觸發(fā)發(fā)送更改的通知。

  在制定的回調(diào)函數(shù)中,處理收到的更改通知。

  注銷觀察者 [object removeObserver:self forKeyPath:property]。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 亚洲综合色就色手机在线观看 | 天天干天天添 | 国产成人99久久亚洲综合精品 | 丁香六月啪 | 欧美一级片在线视频 | 免费在线一区二区三区 | 日本a级精品一区二区三区 日本a级特黄三级三级三级 | 久久久国产精品免费看 | 亚洲最大的黄色网址 | 久久精品国产精品亚洲人人 | 欧美一级免费观看 | 五月天婷婷色 | 中文在线 | 中文 | 精品国产香港三级 | 国产三级日本三级日产三级66 | 国产情侣真实露脸在线最新 | 年轻护士女三级 | 免费又爽又黄禁片视频在线播放 | 亚洲色图视频在线 | 6080伦理久久精品亚洲 | 黄网站色视频免费看无下截 | 国产三级在线观看免费 | 毛片在线播放网站 | 成年网站在线看 | 国产福利精品视频 | 色综合亚洲 | 综合伊人 | tom影院亚洲国产日本一区 | 国产在线一区二区三区四区 | 福利视频午夜 | 中文字幕婷婷 | 美女视频黄a视频免费全过程 | 女人张开腿让男人做爽爽 | 日韩成人一级 | 色老头影院| 日日夜夜天天操 | 国产一级片免费看 | 欧美精品video | 日日爽视频 | 五月婷婷爱 | 国产拍拍拍精品视频 |