2013-03-28 30 views
2

爲什麼泄漏工具告訴我這是泄漏?我正在使用ARC。 我該如何做到這一點,使其不泄漏? BTW,我試圖改變「強」到「弱」,但後來接到警告"Assigning retained object to weak property; object will be released after assignment"初始化方法中帶有弧的內存泄漏

@property (nonatomic, strong) NSMutableArray *myArray; 

-(id)init{ 
    self = [super init]; 
    if (self){ 
     _myArray = [[NSMutableArray alloc] init]; //<== leak here 
    } 
    return self; 
} 
+0

你確定myArray漏了嗎?它也可能是它的主人泄漏(「自我」)。 – elslooo

+0

是的,我試着用_myArray代替,並仍然泄漏(我更新了上面的代碼以顯示該示例) – Harris

+3

@Harris:您指向的代碼行不會泄漏。具有此屬性的對象正在泄漏,或者您將該數組傳遞給保留並泄漏該對象的其他代碼。嘗試打開對象分配工具,它可以跟蹤發生在這個特定數組上的所有保留/釋放,並且可以使用它來找出它不平衡的位置。 –

回答

0

確定ARC實際上是打開了嗎?嘗試添加類似[自釋放]的東西來查看它是否編譯。如果確實如此,則ARC未打開。

+0

是的,我已驗證ARC已打開。 – Harris

+0

那樣的聲音就像一個靜態的分析器bug。沒有什麼應該是泄漏。你有沒有與儀器檢查,看看它是否真的泄漏? –

+0

@Catfish_Man:他正在使用泄漏儀器,而不是靜態分析儀。 –

0

您不應在initdealloc方法內通過其getter訪問properties。相反,你應該直接設置爲後盾伊娃,像這樣:

-(id)init 
{ 
    self = [super init]; 

    if (self) 
    { 
    _myArray = [[NSMutableArray alloc] init]; //<== leak here 
    } 

    return self; 
} 

注:如果您使用的是auto-synthesize功能在Xcode的最新版本 - 也就是說,你沒有手工編寫的@synthesize線 - 支持伊娃將被命名爲與您的財產相同的前面有下劃線。

試試上面的內容,看看泄漏是否消失。

祝你好運。

+0

謝謝。我剛剛嘗試過。沒有區別。 – Harris

+3

我同意你的一般建議,但是這種改變對代碼的內存語義沒有任何影響。 –