[英]Memory leaks in Xcode 4.2 and iOS 5
我使用xcode 4.2,並且使用ARC(自動引用計數)。
這不是內存泄漏,因為ARC發送“釋放”消息:
NSNumber *xy = [[NSNumber alloc] init];
但這可能導致內存泄漏:
char *oldString = "Old String";
char newStrig = strdup(oldString);
我想知道是否可能發生其他類型的內存泄漏? (如果可能的話,不使用C或C ++)
ARC僅適用於Cocoa內存管理。 如果您在Cocoa和CoreFoundation之間為免費的橋接對象進行轉換,則有一些宏可以傳輸內存管理。
您可以在C中泄漏內存,可以在Core Foundation內存中泄漏,靜態分析器可以幫助您找到這些。
ARC並沒有完全消除內存管理。 它消除了管理Cocoa對象的內存的需要,並且在某些情況下(因為它可以優化一些retain
release
調用)在管理內存方面更加有效,但是您仍然需要了解Core Foundation對象和C內存的內存管理。
您還需要了解Cocoa內存管理,以了解何時在塊上使用strong
, weak
或copy
屬性,以及何時在塊上使用Block_copy()
和Block_release()
,即使塊是Cocoa對象,並且在大多數情況下,正確的內存管理是使用ARC為您處理。
再次; ARC並沒有取消內存管理 。 它簡化了它,減少了您必須編寫的代碼量,但是您仍然必須了解在幕后為您完成的工作以及何時需要管理自己的內存。
ARC僅在使用Objective-C內存分配的情況下才可以工作,因為ARC專門與之相關。 實際上,當您使用ARC時,編譯器會盡力使每個分配與一個發行版匹配(甚至無法保證)。
如果您使用的不是Objective-C分配,則您將再次獨自一人。 ARC無法解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.