iphone開發記憶體管理之三 深拷貝和淺拷貝

2021-05-25 15:31:56 字數 749 閱讀 7344

在iphone程式中,屬性合成中的retain/copy/assign有什麼區別?

1)assign就不用說了,因為基本上是為簡單資料型別準備的,原子類型別,例如cgpoint、cgfloat等,而不是ns物件們;

2)retain vs copy

copy其實是建立了乙個相同的物件,而retain不是:

比如乙個nsstring物件,位址為0×1111,內容為@」str」

copy到另外乙個nsstring之後,位址為0×2222,內容相同,新的物件retain為1,舊有物件沒有變化

retain到另外乙個nsstring之後,位址相同(建立乙個指標,指標拷貝),內容當然相同,這個物件的retain值+1

也就是說,retain是指標拷貝,copy是內容拷貝。

objective-c中的copy和c++的一樣分深拷貝和淺拷貝,怎樣區分這兩個物件呢?我的理解是:

(1)深拷貝,就是新拷貝一塊記憶體交給物件使用。

(2)淺拷貝,就是覺得拷貝記憶體太浪費,直接給你我的位址吧,相當於retain。

3)怎麼區分這兩種物件呢?

在objective-c裡面只有一種情況是淺拷貝,那就是不可變物件的copy,其它的都是深拷貝(包括不可變物件mutablecopy、可變物件的的copy和mutablecopy)。

iPhone開發記憶體管理

開發iphone 應用程式並不難,基本上就是三個詞 memory,memory,memory iphone os 對記憶體的要求很嚴格,有memory leak 殺掉 記憶體使用超限額,殺掉。乙個經過測試的程式,在使用過程中90 以上的崩潰都是記憶體問題造成的。在這裡簡單總結一下object c 記...

iphone記憶體管理 二

2 盡量避免使用autorelease 雖然autorelease非常簡單有用,但是在iphone上一定要謹慎使用,畢竟iphone記憶體相當有限.autorelease可能會導致直接的隱型記憶體洩露.比如使用 nsstring string nsstring stringwithformat va...

C 記憶體管理之三(棧和堆)

程式變數分割槽中棧和堆的區別 1 申請方式 stack 由系統自動分配。例如,宣告在函式中乙個區域性變數 int b 系統自動在棧中為b開闢空間。heap 需要程式設計師自己申請,並指明大小,在c中malloc函式,c 中是new運算子。如p1 char malloc 10 p1 new char ...