麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

有關objective-c內存處理機制

2019-11-14 20:14:39
字體:
來源:轉載
供稿:網友

   這幾天學習objective-c,簡單談談對其內存管理機制的理解和看法,有想法的或不同意見的可以一起交流一下,首先objective-c采用了引用計數機制來對內存進行管理。當我們聲明一個實例對象,并為其在堆中開辟內存空間,其內存空間引用計數為1,如果我們release 引用計數減一,當引用計數等于0時,系統就會回收內存。

我們都知道在objective-c中引用由3種方式:

1)assign :Fraction* b=[[Fraction alloc] init];Fraction* a=b;

2)retain:Fraction* b=[[Fraction alloc] init];Fraction* a=b;[b retain];

3)copy Fraction* b=[[Fraction alloc] init];Fraction* a=[b copy];

第一種assign就是簡單的賦值,讓a指向b所指向堆中的內存空間,引用計數不加1,任然為1;如果我們在后面[a release],引用計數減一,所指向內存引用計數為0,內存被回收,那b就成為沒有指向的野指針;

第二種retain,我們知道retain,引用計數加一,當我們[b release],引用計數為1,內存不會被釋放,a依然能夠正常指向,正常引用。

第三種更為靈活,我們需要重寫copyWithZone方法來自定義拷貝,我們可以淺拷貝(返回地址,引用計數不加一),可以retain,也可以直接開辟一塊新的內存空間復制內容進行深拷貝。

  所以,我們一般采用retain引用,為了我們正常引用,防止內存溢出、野指針導致系統奔潰這些情況,我們在引用一個實例對象時需要retain,引用結束需要release,為什么這樣說呢,這是為了保證本次引用能夠正常進行,不受外部release的影響而使其實例變量成為野指針,導致系統崩潰。注意:release和retain是成對存在的。我們在retain引用結束后一定記得release。

  還有就是我們其實也可以讓系統為我們自動釋放內存[[[Fraction alloc] init] autorelease],但我們最好還是手動來管理內存,因為這樣會更加高效,系統管理相當于將我們的內存地址加入到一個集合中,隔段時間進行掃描,這樣遠遠沒有我們手動管理效率高。

這就是objective-c的一些個人理解,希望大家給予指點


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产91精品亚洲精品日韩已满 | 久久国产秒 | 日韩黄色一级视频 | 成码无人av片在线观看网站 | 免费人成在线播放 | 黑色丝袜美美女被躁视频 | 中文字幕免费在线看 | 黄色网战入口 | va毛片| 亚洲国产一区二区三区 | 91不雅视频 | 九九热播视频 | 性aaa| 亚洲电影在线观看高清免费 | 欧美一级毛片大片免费播放 | 媚药按摩痉挛w中文字幕 | 亚洲国产成人久久成人52 | 国产精品嘿咻嘿咻在线播放 | 日韩视频www| 极品大长腿啪啪高潮露脸 | 嫩草影院在线观看网站成人 | 91成人午夜性a一级毛片 | 国产羞羞视频在线观看 | 欧美人与zoxxxx另类9 | 免费在线国产 | 手机免费看一级片 | 中文字幕在线亚洲精品 | 欧美精品一区二区三区在线 | 日本在线免费观看视频 | 亚洲网站免费看 | 黄视频网站免费观看 | 欧美aⅴ视频 | 亚洲卡通动漫在线观看 | 日韩av有码在线 | 一级做a爰性色毛片免费1 | 黄色片在线播放 | 一本免费视频 | 国产午夜免费视频 | 少妇一级淫片高潮流水电影 | 日韩激情一区 | 久久精品久久久久 |