成人免费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

2019-09-11 17:16:34

DockerGitHubWindows

2009-12-30 15:10:44

摩卡

2009-07-14 10:56:21

MyEclipse快捷插件

2023-03-24 07:31:58

Oracle兼容性產品

2009-02-16 09:47:00

IPTV技術多媒體運營

2011-05-30 17:31:26

自動化測試

2013-07-22 17:49:52

Ubuntu虛擬機

2009-07-21 13:01:07

ASP.NET上傳文件

2010-09-01 17:13:56

無線局域網WLAN

2023-06-06 07:31:33

數據庫運維管理平臺

2009-10-28 11:35:25

Linux服務器優化

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

互聯網+發達國家

2010-01-13 10:34:23

VB.NET局部靜態變

2010-02-26 17:47:15

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 丁香久久| 亚洲天堂一区二区 | 国产欧美日韩一区二区三区 | 日韩精品 | 91电影 | 国产片侵犯亲女视频播放 | 中文字幕在线观看www | 久久久久久久久淑女av国产精品 | 日日日日日日bbbbb视频 | 久久久一区二区三区 | 欧美在线视频观看 | 欧美一区二区三区的 | 亚洲午夜精品一区二区三区 | 中文字幕精品视频在线观看 | 久久九九99 | 国产日韩精品久久 | 在线色网| 成人美女免费网站视频 | 日本精品一区二区 | 亚洲视频一区二区三区四区 | 99精品国产一区二区青青牛奶 | 色综合久久天天综合网 | 一区二区久久 | 特级丰满少妇一级aaaa爱毛片 | 久久99久久| 玖玖视频 | 欧美成人精品在线 | 在线观看国产视频 | 国产成人精品久久二区二区91 | 日韩爱爱网 | 午夜一区二区三区在线观看 | 日韩免费av一区二区 | 美国一级毛片a | 伊人二区 | 亚洲二区视频 | 久久综合一区 | 亚洲精品一区中文字幕 | 日韩一级 | 九九综合| 日韩精彩视频 | 久久亚洲春色中文字幕久久久 |