堆和棧

???

按管理方式看:oc對象存放于堆里面(堆內(nèi)存需要程序員手動回收)

非oc對象一般放在棧里面(棧內(nèi)存會被系統(tǒng)自動回收)

按分配方式分:堆是動態(tài)和回收內(nèi)存的,沒有靜態(tài)分配的堆。

棧有靜態(tài)分配和動態(tài)分配兩種,靜態(tài)分配由系統(tǒng)編譯器完成,比如局部變量分配。動態(tài)分配是有alloc函數(shù)進行分配,它的動態(tài)分配也是由系統(tǒng)編譯器進行釋放,不需要程序員手動管理。


擴展:oc中nsstring的內(nèi)存存儲方式:

NSString* name = @"zhangsan"去定義,屬于常量類型,程序會把這部分數(shù)據(jù)放到全局變量存儲區(qū),你不用釋放,你也釋放不掉,不信你可以release以后再查看它的retainCount;

[[NSString alloc] ] initWithFormat:@"%@ %@",firstname,secondname];這種類型的需要釋放,因為alloc過了,程序需要手動用release釋放,你寫的那種方法不正確,沒有直接init的。

[NSString stringWithFormat:@"%@ %@",firstname,secondname];這種類型生成的NSString是autorelease類型的變量,不需要釋放,程序一次runLoop結(jié)束后就會釋放。你不能用release釋放。

初始化字符串的時候,直接賦值 @"abc",stringWithString ,alloc? initWithString這三種方法中,@"abc"? 存放在常量池。重復(fù)賦值,不會重新分配內(nèi)存空間。

注意:常量區(qū)的引用計數(shù)是lu的最大值。

stringWithFormat? alloc? initWithFormat ,存放的地址為堆區(qū)。? ? NSString 不需要我們進行內(nèi)存管理,F(xiàn)oundation框架會自動幫我們管理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 前言 因為前段時間因為一些事情而晚上失眠多夢,身體素質(zhì)直線下降,前天下班后去健身房減完身,感到惡心難受,后來發(fā)生了...
    Dely閱讀 13,632評論 40 172
  • 進程的內(nèi)存分區(qū) 本文的堆和棧是操作系統(tǒng)的內(nèi)存中堆和棧,不是數(shù)據(jù)結(jié)構(gòu)中的堆和棧。所有進程(執(zhí)行的程序)都必須占用一定...
    Fendouzhe閱讀 220評論 0 2
  • 在函數(shù)中定義的一些基本類型的變量和對象的引用變量都在函數(shù)的棧內(nèi)存中分配。 當在一段代碼塊定義一個變量時,Java就...
    木有魚丸啦閱讀 566評論 0 0
  • 建模與數(shù)據(jù)深度:達到LOD500 ?建筑、結(jié)構(gòu)、設(shè)備各系統(tǒng)分開、分層搭建,滿足各應(yīng)用體系對模型和數(shù)據(jù)的要求 ?設(shè)計...
    圖驢閱讀 441評論 0 0
  • 喜歡一個人,是什么感覺呢?是莫名的悸動。那愛呢,是什么感覺?是莫名的心跳。這是我一位朋友的答案。 有人說,喜歡...
    墨語楓樺閱讀 188評論 0 0