ios學習 理解nsarray中地記憶體管理

2021-06-06 15:24:40 字數 832 閱讀 6110

問題:

通過alloc和init的方法建立了nsarray和nsdictionary,然後通過addobject和setobject:forkey:將object新增進去。通過addobject會自動將我的object進行retain操作。

可是當我的nsarray和nsdictionary用完了,如果僅僅是將nsarray和nsdictionary進行release操作的話,我新增進去的object好像不會呼叫自己的dealloc,請問由什麼方法可以正確的釋放nsarray和nsdictionary,並且將他們裡面的object也正確釋放,從而防止記憶體洩露,而且這方法要是安全的(也就是不會誤殺,也不會導致讀取錯誤指標)。

ps:如果是要copy乙個nsarray或者nsdictionary的時候,又該如何處理?如果只對nsarray和nsdictionary進行copy的話,nsarray和nsdictionary會分配乙個新的指標,可是nsarray和nsdictionary裡面的內容還是指向原來的指標。

答案:nsmutablearray *array = [nsmutablearray new];

nsstring *str = [[nsstring alloc] initwithformat:@"a"];

[array addobject:str];

[str release];

[array release];

以上,也就是說當你吧str放進array的時候,相當於建立了乙個str的副本,而這個副本的生命週期也就交給了array來管理了, 你只要負責把原來的物件進行釋放也就可以了。[array release]的時候會呼叫相應的方法對陣列裡面的元素進行釋放。簡單來說也就是誰汙染誰治理了。

ios 開發 NSArray 排序

針對nsstring字串的排序 方法一 nsarray ary a3 a1 a2 a10 a24 nslog ary nsarray myary ary sortedarrayusingcomparator nsstring obj1,nsstring obj2 nslog myary 結果 a3,...

iOS之NSArray使用集合

1.陣列中元素按公升序或降序列排列 公升序 nsarray tempids spceidsarr sortedarrayusingcomparator nscomparisonresult nsstring obj1,nsstring obj2 2.將string字串轉換為array陣列 nsarr...

iOS 查詢 大 NSArray中的某個物件

大 大 大陣列 重要的事情說三遍!很久之前有一次面試,大哥問我 定位的時候,你在陣列中去找該位址是遍歷陣列嗎?我毫不猶豫 當然是遍歷陣列,根據首寫字母來找對應組再去找對應位址會更快些 然而雖然我是這樣想的,但是我覺得我回答的不對,但是我沒有去找最佳答案。直到 現在遇到了真正的大陣列,在乙個龐大的陣列...