這看起來可能是一個簡單的問題,但我真的不知道應該在什麼時候使用alloc,retain或者copy。alloc,retain和copy之間的區別是什麼
4
A
回答
22
請通過this內存管理長篇教程。它可能需要一些時間來閱讀整個,但它很好地解釋了基本的東西。
編輯:關於複製 - 當你使用保留,那麼你只是增加對象的保留計數。但是,當您使用副本時,將創建對象的單獨副本(淺拷貝)。單獨的裝置,它是一個不同的對象,具有保留計數1.
例如,
NSObject *obj1 = [[NSObject alloc] init]; // obj1 has retain count 1 // obj1 and obj2 both refer same object. now retain count = 2 // any change via obj1 will be seen by obj2 and vice versa, as they point same object NSObject *obj2 = [obj1 retain]; // obj3 is a separate copy of the object. its retain count is 1 just like newly allocated object // change via obj3 will not affect obj1 or obj2 and vice versa as they are separate objects NSObject *obj3 = [obj1 copy];
4
的Alloc:當你需要的內存分配(您想創建一個對象,你需要分配它的存儲空間)
每個對象都有一個保留計數指示對象的數量有對該物體的所有權利益。它自動完成alloc和複製(複製意味着你想要一個該對象的副本)。但你也可以通過使用保留關鍵字來完成。
當保留計數== 0,則對象的dealloc 方法將被調用和將釋放該對象的所有分配。
我希望它很清楚。 如果您想了解更多信息:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html
+0
1用於指向最好文檔。 – taskinoor 2010-11-03 12:27:13
相關問題
- 1. [[alloc] init]和[[thing] retain]之間有什麼區別?
- 2. alloc,copy和new有什麼區別?
- 3. ** copy **和** addAll **之間是否有區別?
- 4. Objective-C - alloc和allocFromZone之間的區別?
- 5. [[NSMutableArray alloc] init]和[@ [] mutableCopy]之間有什麼區別?
- 6. std :: uninitialized_copy和std :: copy之間的區別?
- 7. Xcode構建階段的Copy Bundle Resources和Copy Files之間有什麼區別?
- 8. $(())和expr之間的區別是什麼?
- 9. $和$ .fn之間的區別是什麼?
- 10. ++和:haskell之間的區別是什麼?
- 11. $(「」)和$ .find(「」)之間的區別是什麼?
- 12. 「\」和「\。」之間的區別是什麼?
- 13. 「$ | ++」和「$ | = 1」之間的區別是什麼
- 14. $(...)和`...`之間的區別是什麼
- 15. .equals()和==之間的區別是什麼?
- 16. [undefined]和[,]之間的區別是什麼?
- 17. 通過alloc方法,singleton和common object init之間的區別是什麼?
- 18. alloc和allocWithZone有什麼區別:?
- 19. 使用@property(copy)和@property(retain)的經驗法則是什麼?
- 20. 區別:%% a和%variable%變量之間的區別是什麼?
- 21. 什麼是爲PrintWriter和DataOutputStream之間的區別是什麼?
- 22. obj-c NSString和alloc/retain/release
- 23. #include和copy&paste有什麼區別?
- 24. 在ARC下,[[X alloc] initWith ..]和[X xWith ...]之間是否有區別?
- 25. Cocoa-Touch。類方法init版本alloc/init之間的語義區別是什麼?
- 26. MVC和MVVM之間的區別和相似之處是什麼?
- 27. TVF/UDF之間的區別是什麼
- 28. [EmailPasswordAuthProvider,EmailAuthProvider]之間的區別是什麼
- 29. System.Linq.Enumerable.WhereListIterator&System.Linq.Enumerable.WhereSelectListIterator之間的區別是什麼?
- 30. 什麼之間的區別〜^和Git中
謝謝。本教程解釋了保留意味着什麼以及相當多的基本內存管理,但並沒有真正解釋複製方法的作用。有沒有更多關於內存管理的教程,或者只有alloc內存部分?謝謝 – TheAmateurProgrammer 2010-11-03 12:00:11
檢查編輯。 – taskinoor 2010-11-03 12:17:45
而且當你有時間時,請查看William Remacle建議的關於內存管理的詳細指南。 – taskinoor 2010-11-03 12:26:12