<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 基礎 ##### 1. 為什么說Objective-C是一門動態的語言? ``` 1. 什么叫動態靜態? 靜態、動態是相對的,這里動態語言指的是不需要在編譯時確定所有的東西,在運行時還可以動態的添加變量、方法和類 Objective-C 可以通過Runtime 這個運行時機制,在運行時動態的添加變量、方法、類等,所以說Objective-C 是一門動態的語言 2. 其他說法 Objective-C 是C 的超集,在C 語言的基礎上添加了面向對象特性,并且利用Runtime 這個運行時機制,為Objective-C 增添了動態的特性。 Objective-C 使用的是 “消息結構” 并非 “函數調用”:使用消息結構的的語言,其運行時所應執行的代碼由運行期決定;而使用函數調用的語言,則由編譯器決定 (1)動態類型語言:動態類型語言是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其他的各種腳本語言如VBScript也多少屬于動態類型語言。 (2)靜態類型語言:靜態類型語言與動態類型語言剛好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明所有變量的數據類型,C/C++是靜態類型語言的典型代表,其他的靜態類型語言還有C#、JAVA等。 因為在運行期可以繼續向類中添加方法,所以編譯器在編譯時還無法確定類中是否有某個方法的實現。對于類無法處理一個消息就會觸發消息轉發機制 3. Objective-c的動態性 Objective-C的動態性,讓程序在運行時判斷其該有的行為,而不是像c等靜態語言在編譯構建時就確定下來。它的動態性主要體現在3個方面: * 動態類型:如id類型。實際上靜態類型因為其固定性和可預知性而使用的特別廣泛。靜態類型是強類型,動態類型是弱類型,運行時決定接收者。 * 動態綁定:讓代碼在運行時判斷需要調用什么方法,而不是在編譯時。與其他面向對象語言一樣,方法調用和代碼并沒有在編譯時連接在一起,而是在消息發送時才進行連接。運行時決定調用哪個方法。 * 動態載入。讓程序在運行時添加代碼模塊以及其他資源。用戶可以根據需要執行一些可執行代碼和資源,而不是在啟動時就加載所有組件。可執行代碼中可以含有和程序運行時整合的新類。 ``` ##### 2. 講一下MVC、MVP、MVVM? ###### MVC: ![AA](https://images2017.cnblogs.com/blog/1107494/201712/1107494-20171229160410054-1372857861.jpg) ``` MVC有兩個很明顯的問題: 1.m層和v層直接打交道,導致這兩層耦合度高 2.因為所有邏輯都寫在c層,導致c層特別臃腫 為了解決這兩個問題,MVC的變種模式出現了MVP和MVVM. ``` ###### MVP: ![AD](https://images2017.cnblogs.com/blog/1107494/201712/1107494-20171229160705413-1733012447.jpg) ``` p層代替了了c層,v層和m層的交互被p層隔斷,從理論上去除了v和m層的耦合 但是造成p層比原來的c層更加臃腫,為了緩解這種臃腫,MVVM出現了 ``` ###### MVVM: ![AA](https://images2017.cnblogs.com/blog/1107494/201712/1107494-20171229161108492-95042495.jpg) ``` 簡單的來說MVVM其實就是MVP中把P層削弱為VM層,部分簡單的邏輯職責分給了View層。 例如ng中的ng-if,ng-for....其實就是V層上的簡單邏輯,這樣做使得VM層相比起P層就沒有這么臃腫了 ``` [開發架構學習](https://www.jianshu.com/p/6a86f7fdc0cb) ##### 3. 為什么代理要用weak?代理的delegate和dataSource有什么區別?block和代理的區別? ###### iOS代理為啥要用weak修飾 防止循環引用。例如View有一個協議,需要一個代理實現回調。一個Controller添加這個View,并且遵守協議,成為View的代理。如果不用week,用strong,Controller ->View -> delegate -> Controller,就循環引用了。 ```weak```:指明該對象并不負責保持delegate這個對象,delegate這個對象的銷毀由外部控制 ``` @property (nonatomic, weak) id<HSDogDelegate>delegate; ``` ```strong```:該對象強引用delegate,外界不能銷毀delegate對象,會導致循環引用(Retain Cycles) ``` @property (nonatomic, strong) id<HSDogDelegate>delegate; ``` ###### 代理的delegate和dataSource有什么區別? ``` delegate偏重于與用戶交互的回調,有那些方法可以供我使用,例如UITableviewDelegate;dataSource偏重于數據的回調,view里面有什么東西,屬性都是什么,例如UITableviewDatasource; ``` ###### 通知、block和代理的區別? ###### `代理` ``` 特點是一對一的形式,而且邏輯結構非常清晰。實現起來較為簡單:寫協議 ,設置代理這個屬性, 最好在你想通知代理做事情的方法中調用即可。當然這里面有一些細節,包括 ①協議定義時,請用關鍵字@required,和@optional來明確代理是否必須實現某些方法 ②代理的類型需用id類型,并寫明要遵守的協議 ③就是在調用代理方法的時候需要判斷代理是否實現該方法。 ``` ###### `Block` ``` 這是蘋果后來才加入的,也是目前開發比較常用的一種方式,功能比較強大,但是在理解和使用上可能需要一段時間摸索和熟悉。他的最大特點就是回調,而且回調時可以傳入參數,最重要的是,無論在哪調用,block的執行都會回到block創建的地方執行,而非調用的地方。而block本身可以封裝一段代碼,一段代碼你懂的,很多人在初學時會被搞暈,甚至在block的聲明上就糾結,其實很正常,多用就好。 ``` ###### `通知` ``` 通知的優點很明顯,他是一對多的形式,而且可以在任意對象之間傳遞,不需要二者有聯系,當然他的實現和代理相比較稍微繞一點,注冊,發通知,收通知。這里面的注意點就是 ①對于系統沒有定義的事件監聽時需要自己發通知,這是你就需要定義一個key,字符串類型,這也是通知的一個弊端,你需要拷貝到收通知的對象,避免寫錯一個字母而無法收通知的尷尬 ②就是注冊的通知中心需要手動移除,不然除了性能的問題還會有其他的問題出現,比如說一個控制器消失了之后還有因為某些事件而發出通知,造成不想要的結果 ``` `學習過程:` [block和代理的區別,哪個更好?](https://www.jianshu.com/p/27b27db01593) [通知/代理/block 三者比對](https://www.cnblogs.com/zouhengwei/p/5433308.html) ##### 4. 屬性的實質是什么?包括哪幾部分?屬性默認的關鍵字都有哪些?@dynamic關鍵字和@synthesieze關鍵字是用來做什么的? ##### 5. 屬性的默認關鍵字是什么? ##### 6. NSString為什么要用copy關鍵字,如果用strong會有什么問題?(注意這里沒有說用strong就一定不行。使用copy和strong是看情況而定的) ##### 7. 如何令自己所寫的對象具有拷貝功能? ##### 8. 可變集合類和不可變集合類的copy和mutablecopy有什么區別?如果是集合是內容復制的話,集合里面的元素也是內容復制嗎? ##### 9. 為什么IBOutlet修飾的UIView也適用于weak關鍵字? ##### 10. nonatomic和atomic的區別? atomic是絕對線程安全嗎?為什么?如果是那應該如何實現? ##### 11. UIColletionView自定義layout如何實現? ##### 12. 用StoryBoard開發的界面有什么弊端? 如何避免? ##### 13. 進程和線程的區別?同步和異步的區別? 并行和并發的區別? ##### 14. 線程間通信? [線程間通信](https://www.jianshu.com/p/aacd3409f14b) [什么是多線程,創建線程](https://www.jianshu.com/p/fc69da0dce7a) [多線程之iOS線程間通信](https://www.jianshu.com/p/e0c0d43f9ab2) ##### 15. GCD的一些常用的函數? (group、barrire、信號量、線程同步) ##### 16. 如果使用隊列來避免資源搶奪? ##### 17. 數據持久化的幾個方案(fmdb) ##### 18. 說一下AppDelegate的幾個方法? 從后臺到前臺調用了哪些方法? 第一次啟動調用了哪些方法? 從前臺到后臺調用了哪些方法? ##### 19. NSCache優于NSDictionary的幾點? ##### 20. 知不知道Designated Initializer?使用它的時候有什么需要注意的問題? ##### 21. 實現description方法能取得什么效果? ``` ios中的description方法,在iOS中description方法是一個非常實用的方法,在調試程序時,經常要打印并查看對象的信息。一種辦法是編寫代碼把對象的全部屬性都輸出到日志中 ``` [ios中的description方法](https://www.jianshu.com/p/08b59e425d2c) ##### 22. Objc使用什么機制管理對象內存? ``` 通過 retainCount 的機制來決定對象是否需要釋放。每次 runloop 的時候,都會檢查對象的 retainCount,如果retainCount 為 0,說明該對象沒有地方需要繼續使用了,可以釋放掉了。 ``` [objc使用什么機制管理對象內存?](https://www.jianshu.com/p/7af21e300f57) [內存管理](https://www.jianshu.com/p/0ad9957e3716)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看