天天看點

NSArray,NSMutableArray,NSXXXXX,NSMutableXXXXX等之間的本質差別(堆,棧)

    一直對ios裡面的NSArray,NSMutableArray内容能更改和不能更改感到模糊,網上也找不到詳細的說明,思考了一下,覺得可以用java裡面的知識來解決!

    情況其實是這樣的:NSArray建立之後會在堆中建立一塊區域A,然後指針MoMo指向這塊區域A,但是這塊區域的大小是已經确定不能更改的了。但是我們還是能夠看到有setobject的方法,可以向裡面添加改變值。這是因為會在堆中在建立一個記憶體區域B,把原來堆記憶體A中的資料複制到這個堆區域B中,然後在這個新的區域B裡面添加你setobject進去的值,并把棧中的指針對象MoMo指向B。這樣就是說原來A的對記憶體值沒有發生變化,但是你的指針MoMo在指向新的記憶體區域B之後指針對應的值已經變化了。因為B中有A的複制内容,還有最後你新添加進去(setobject)的值。

    NSMutableArray就是另外一種方式了。說他内容可變,就是說原來的堆中記憶體A還是A,但是你添加的值(setobject)直接存放在A中你需要的位置如末尾,全過程中沒有B的存在了。顯然這樣的速度會更快。

  兩者比較的話,我覺得還是NSMutableArray的執行效率會更快一些,但是還沒有找到他們各自更加通用的優缺點。

  真相終于大白于天下!對于其他的NSXXXXX,NSMutableXXXXX這種格式的,雖然不知道具體情況,但是本人考慮是和上面一樣的機制。可以一樣的了解。如果您覺得不會或以後發現不對,希望回來指出錯誤以友善我改正。謝謝。