2012-03-30 62 views
0

我只是清理了一下我的代碼,並在函數中發現了幾行,我不確定它們是否產生內存泄漏。 我會很感激任何想法。具有「複製」屬性的NSURL屬性。它泄漏了嗎?

在此先感謝!

在下面的代碼中,變量filepath是NSURL和文件名,它是一個定義爲屬性的NSString對象。定義屬性設置爲「複製」。 下面的代碼:

-(BOOL)isEqual:(id)object 
{ 
    if (self == object) 
     return YES; 

    if (!object || ![object isKindOfClass:[self class]]) 
     return NO; 

    if (![[[self filepath] path] isEqual:[[object filepath] path]]) 
     return NO; 

    if (![[self filename] isEqualToString:[object filename]]) 
     return NO; 

    if (![[self filesize] isEqualToString:[object filesize]]) 
     return NO; 

    if (![[[self filepath ] absoluteURL] isEqual:[[object filepath] absoluteURL]]) 
     return NO; 

    if (!([[[self filepath ] absoluteURL ] isFileURL ] && [[[object filepath] absoluteURL ] isFileURL ])) 
     return NO; 

    return YES; 
} 

從我的理解,使用複製屬性的屬性將有+1的保留計數返回一個對象。這意味着,我應該在每個if語句中都有內存泄漏。 這是正確的嗎?

回答

2

您的代碼片段中沒有任何內容表示泄漏。

複製屬性意味着當您設置屬性時,您保留的對象的副本保留計數爲。你不能簡單地通過在代碼中引用它來泄漏它(甚至通過該屬性的訪問器)。

另一方面,'filepath'和'filename'應該在包含它們的對象的-dealloc方法中釋放。沒有這樣做(假設參考計數內存模式)導致泄漏。

+0

有趣!所以(只讀,複製)的設置是絕對無用的,對吧?我當然會釋放相應的dealloc方法中的對象。感謝您的回答! – guitarflow 2012-03-30 16:58:13

+0

@guitarflow您是否使用Leaks模塊通過Instruments運行應用程序? – trudyscousin 2012-03-30 17:00:21

+0

我知道我可以做到這一點。我的應用程序需要一些進一步的工作才能再次運行;-)所以我認爲在這裏問是最簡單的選擇。但謝謝你的提示! – guitarflow 2012-03-30 17:20:00