成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iPhone內存管理面面觀 對象所有權與引用計數

移動開發 iOS
本文將詳細介紹iOS內存管理的對象的所有權與引用計數。希望這些介紹會對開發者有所幫助。

51CTO在前段日子采訪了國內最牛的iPhone開發團隊,與各位一起走進了iOS開發。在iOS開發里,內存管理是iPhone或iPad開發中最為重要的一部分。掌握好了內存管理,開發出的應用就能運行流暢;掌握不好,開發出的東西就會效率低下,且容易崩潰。本文詳細介紹iOS內存管理的對象的所有權與引用計數。希望這些介紹會對開發者有所幫助。

當一個所有者(owner,其本身可以是任何一個Objective-C對象)做了以下某個動作時,它擁有對一個對象的所有權(ownership):

1. 創建一個對象。包括使用任何名稱中包含“alloc”、“new”、或者“copy”的方法。

2. 保留(retain)一個對象。

一個對象可以有多個所有者,一個所有者也可以擁有多個對象。

相應的,引用計數增減的基本規則是:

1.當所有者創建一個對象時,該對象的引用計數為1。

2.當所有者保留它時,該對象的引用計數加1。

3.當所有者釋放(release)它時,該對象的引用計數減1。

與此相關的,當一個所有者對于一個對象的引用計數的增減總計為0時,它放棄了對這個對象的所有權。

現在我們可以從兩個不同的角度來看Objective-C的內存管理問題。從對象所有權的角度來看,當一個對象有著至少一個所有者(owner)的時候,它依然存在;當它沒有任何所有者的時候,它會被釋放掉。從引用計數的角度看,一個對象存在時,其引用計數大于零;當一個對象的引用計數為零時,它會調用dealloc方法并釋放掉。這兩個角度的關系是:在所有權的背后起作用的機制是引用計數機制;我們通過引用計數的增減來理解所有權的概念;但是你只應當使用所有權的概念來管理內存,因為如果你試圖直接獲取對象的引用計數,那么得到的數將讓你感到匪夷所思——系統的一些框架會“偷偷”增減對象的引用計數。

回顧一下,內存管理的目標是:

當一個對象的某個所有者依然需要使用它時,保證這個對象的存在;當一個對象的所有所有者都不再需要它時,保證這個對象被銷毀。因此只要任何一個所有者在使用完一個對象之后釋放掉它,那么以上內存管理的目標就可以實現。

我們可以得出任何一個所有者(記住,所有者本身也只是一個對象)所應當遵守的基本步驟:

擁有一個對象 -> 使用一個對象 -> 放棄對象的所有權。

從引用計數的角度來看就是:

還需要這個對象時,保持對其增減為正;不再需要這個對象時,保持對其增減為0。

下圖很好地詮釋了這些基本規則:所有者1和所有者2單獨地執行了擁有對象、使用對象、放棄對象所有權的步驟;當所有者1不再需要該對象時及時放棄了所有權,但此時所有者2依然擁有該對象,因此該對象依然存在,所有者2可以繼續使用它;當所有者2也不再需要該對象時,也放棄掉所有權,這時對象以不再有任何所有者(相應的引用計數也變為0),因此立刻被銷毀掉。

引數計數的基本規則
引數計數的基本規則

需要注意的是,所有者2只是復制了該對象的指針,并沒有使用copy方法,因此復制指針這個操作本身并不增加對象的引用計數;而正因為所有者2希望能使用該對象,因此通過retain方法成為它的所有者,也保證了所有者1放棄該對象時,對象不被銷毀。

原文地址:http://lichen1985.com/blog/?cat=10

 

【編輯推薦】

  1. 蘋果發布iOS 4大量SDK 全面支持iPhone 4
  2. 專訪最牛iPhone開發團隊:走進移動開發
  3. 蘋果增加iPhone軟件銷售窗口 旨在示好開發者
  4. iPad軟件設計初步:它不只是大號的iPhone
  5. 月入40萬 iPhone中文應用程序開發者訪談
責任編輯:佚名 來源: 雨雪霏霏博客
相關推薦

2010-09-13 08:58:47

自動釋放便捷方法內存管理

2020-04-08 09:57:53

漏洞安全漏洞漏洞管理

2013-03-25 13:52:39

SDN軟件定義網絡Hybird

2009-12-30 15:10:44

摩卡

2019-09-11 17:16:34

DockerGitHubWindows

2009-07-14 10:56:21

MyEclipse快捷插件

2011-05-30 17:31:26

自動化測試

2013-07-22 17:49:52

Ubuntu虛擬機

2009-02-16 09:47:00

IPTV技術多媒體運營

2023-03-24 07:31:58

Oracle兼容性產品

2010-09-01 17:13:56

無線局域網WLAN

2009-07-21 13:01:07

ASP.NET上傳文件

2023-06-06 07:31:33

數據庫運維管理平臺

2011-01-07 09:19:35

Linux文件權限

2010-07-08 10:03:39

動態語言PythonRuby

2022-02-22 06:11:46

數字化轉型企業云數據庫

2015-07-22 09:54:48

互聯網+發達國家

2009-10-28 11:35:25

Linux服務器優化

2011-10-14 06:58:30

Ubuntu 11.1特性

2012-04-23 09:32:15

AppCan跨平臺開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品乱码 | 亚洲成人精品国产 | 欧美一区二区三区久久精品 | 大乳boobs巨大吃奶挤奶 | 二区在线观看 | 精品欧美一区二区三区久久久 | 久久er精品| 男女羞羞视频在线 | 97色在线视频 | 亚洲视频一 | 亚洲在线一区 | 国产成人免费视频网站视频社区 | 欧美精品一区在线观看 | 麻豆一区 | 精品国产乱码久久久久久蜜柚 | 日韩视频一区在线观看 | 精品日本久久久久久久久久 | 日韩综合一区 | 成人在线视频观看 | 男人久久天堂 | 中文字幕亚洲一区二区三区 | 欧美日一区 | 青青久草| 九九热这里只有精品在线观看 | 9久久| 视频一区二区在线观看 | 色婷婷av一区二区三区软件 | www.性色 | 一级黄色片免费 | 日韩欧美国产一区二区三区 | 久久精品国产久精国产 | www.47久久青青 | 日本高清视频在线播放 | 国产精彩视频 | 久久久久无码国产精品一区 | 美国av片在线观看 | 精品欧美一区二区三区精品久久 | www.中文字幕av | 亚洲第一色站 | 日韩精品在线观看一区二区 | 中文字幕国产 |