ios開發:OC對象的記憶體分析,ios開發oc對象

來源:互聯網
上載者:User

ios開發:OC對象的記憶體分析,ios開發oc對象

   最近要開始準備找實習單位了,做做筆試題,看看各位大神的面試經曆,發現自己要學習的東西真的還有很多,雖然也做過幾個的項目,但是真正拿過筆試題一看,才發現自己對基礎這方面的東西,確實有點忽視了,所以最近開啟惡補模式。

   這幾天在研究ios記憶體分析這一塊,才發現自己原來忽視了這麼多重要的東西,在這裡和大家分享一下。

   先來看一段代碼:

    

NSString* s;
s = [[NSString alloc] initWithString:@"hello ios"];

  這是一段最簡單的字串定義,但是看似簡單,其實有很多東西可能會被忽略掉

  1.這裡的s其實是個指標,在oc中除了基礎資料型別 (Elementary Data Type)之外的變數類型都是指標類型,oc的對象也是通過指標進行操作的。

  2. 在第一段代碼定義了NSString類型的指標變數,但是並沒有指向任何對象,第二段代碼alloc一個NSString對象  然後使s指向它,並通過s開始其的後續操作。

  3. 這裡s的記憶體空間在棧記憶體中,“hello ios”在堆記憶體中。

下面通過圖示說明一下

再來看一個例子

@interface C: NSObject{  int a;  int b;       }@endint main(int argc, const char *argv[]){  C *c1 = [[C alloc]init];  C *c2 = [[C alloc]init];      }

記憶體分布情況

  看到這裡大家也就能明白了,oc中建立的對象指標儲存在棧記憶體中,而alloc出來的對象的記憶體在堆記憶體中,棧記憶體中的指標通過賦值指向堆記憶體中的對象,然後通過棧記憶體中的指標訪問對象及其變數,也就是說,其實我們在建立一個對象時其實是利用了兩個部分的記憶體空間。

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.