日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

李洪强iOS经典面试题36-简单介绍 ARC 以及 ARC 实现的原理

發布時間:2024/4/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 李洪强iOS经典面试题36-简单介绍 ARC 以及 ARC 实现的原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

李洪強iOS經典面試題36-簡單介紹 ARC 以及 ARC 實現的原理

問題

?

簡單介紹 ARC 以及 ARC 實現的原理。

考查點

ARC 是蘋果在 WWDC 2011 提出來的技術,因此很多新入行的同學可能對此技術細節并不熟悉。但是,雖然 ARC 極大地簡化了我們的內存管理工作,但是引用計數這種內存管理方案如果不被理解,那么就無法處理好那些棘手的循環引用問題。所以,這道面試題其實是考查同學對于 iOS 程序內存管理的理解深度。

答案

自動的引用計數(Automatic Reference Count 簡稱 ARC),是蘋果在 WWDC 2011 年大會上提出的用于內存管理的技術。

引用計數(Reference Count)是一個簡單而有效的管理對象生命周期的方式。當我們創建一個新對象的時候,它的引用計數為 1,當有一個新的指針指向這個對象時,我們將其引用計數加 1,當某個指針不再指向這個對象是,我們將其引用計數減 1,當對象的引用計數變為 0 時,說明這個對象不再被任何指針指向了,這個時候我們就可以將對象銷毀,回收內存。由于引用計數簡單有效,除了 Objective-C 語言外,微軟的 COM(Component Object Model )、C++11(C++11 提供了基于引用計數的智能指針 share_prt) 等語言也提供了基于引用計數的內存管理方式。

引用計數這種內存管理方式雖然簡單,但是手工寫大量的操作引用計數的代碼不但繁瑣,而且容易被遺漏。于是蘋果在 2011 年引入了 ARC。ARC 顧名思義,是自動幫我們填寫引用計數代碼的一項功能。

ARC 的想法來源于蘋果在早期設計 Xcode 的 Analyzer 的時候,發現編譯器在編譯時可以幫助大家發現很多內存管理中的問題。后來蘋果就想,能不能干脆編譯器在編譯的時候,把內存管理的代碼都自動補上,帶著這種想法,蘋果修改了一些內存管理代碼的書寫方式(例如引入了?@autoreleasepool?關鍵字)后,在 Xcode 中實現了這個想法。

ARC 的工作原理大致是這樣:當我們編譯源碼的時候,編譯器會分析源碼中每個對象的生命周期,然后基于這些對象的生命周期,來添加相應的引用計數操作代碼。所以,ARC 是工作在編譯期的一種技術方案,這樣的好處是

  • 編譯之后,ARC 與非 ARC 代碼是沒有什么差別的,所以二者可以在源碼中共存。實際上,你可以通過編譯參數?-fno-objc-arc?來關閉部分源代碼的 ARC 特性。

  • 相對于垃圾回收這類內存管理方案,ARC 不會帶來運行時的額外開銷,所以對于應用的運行效率不會有影響。相反,由于 ARC 能夠深度分析每一個對象的生命周期,它能夠做到比人工管理引用計數更加高效。例如在一個函數中,對一個對象剛開始有一個引用計數?+1的操作,之后又緊接著有一個?-1?的操作,那么編譯器就可以把這兩個操作都優化掉。

  • 但是也有人認為,ARC 也附帶有運行期的一些機制來使 ARC 能夠更好的工作,他們主要是指 weak 關鍵字。weak 變量能夠在引用計數為 0 時被自動設置成 nil,顯然是有運行時邏輯在工作的。我通常并沒有把這個算在 ARC 的概念當中,當然,這更多是一個概念或定義上的分歧,因為除開 weak 邏輯之外,ARC 核心的代碼都是在編譯期填充的。

    全文完。


    總結

    以上是生活随笔為你收集整理的李洪强iOS经典面试题36-简单介绍 ARC 以及 ARC 实现的原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。