NSArray記憶體布局,nsarray布局

來源:互聯網
上載者:User

NSArray記憶體布局,nsarray布局

Objective-C的數組比C++,Java的數組強大在於,NSArray儲存的對象可以是不同的對象。但只能儲存對象,int ,char,double等基礎資料型別 (Elementary Data Type)不能直接儲存,需要通過轉換成對象才能加入數組。

那麼,OC是如何做到儲存不同的對象的呢?NSMutableArray繼承自NSArray,他又是如何進行插入和刪除操作的呢?如何儲存的是對象本身,是鏈式儲存還是順序儲存?如果是順序儲存,那麼插入和刪除操作豈不是很麻煩?

首先,NSArray儲存的是對象的指標,而非對象本身。這樣的話,NSArray就可以儲存不同的對象的指標;這樣對話,NSMutableArray進行插入和刪除操作也不會太麻煩(畢竟指標佔用的空間小);那麼NSArray是如何儲存的呢?

Student *stu = [[Studentalloc] init];

Student *stu1 = [[Studentalloc] init];

Student *stu2 = [[Studentalloc] init];

Student *stu3 = [[Studentalloc] init];

NSArray *arr = @[stu,stu1,stu2,stu3];

NSLog(@"\narr1 is %p\narr2 is %p\narr3 is %p\narr4 is %p",[arrobjectAtIndex:0],[arrobjectAtIndex:1],[arrobjectAtIndex:2],[arrobjectAtIndex:3]);

運行結果如:


看到這裡,我頓時淩亂裡,這也不連續啊?這裡列印的其實是裡面元素的地址。

view of memory "arr"得到:


第一個地址0x 01 00 30 01 10是NSArray中isa指標

第二個地址0x 01 00 11 0a 60 是arr4的地址

第三個地址0x 01 00 20 00 10 是arr3的地址

......

好了,到這裡為止,我們知道了nsarray的記憶體布局:順序儲存物件的指標

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.