在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 ...