2011-06-20 52 views
1

我發現內存泄漏下面的代碼片段,我寫的NSFileManager泄漏

NSFileManager *fileManager=[[NSFileManager alloc] init]; 
fileList=[[fileManager contentsOfDirectoryAtPath:DOCUMENTS_FOLDER error:nil] retain]; 
[fileManager release]; 

泄漏信息 -

[NSFileManager contentsOfDirectoryAtPath:error:] 
[NSFileManager directoryContentsAtPath:matchingExtension:options:keepExtension:error] 
CFStringCreateWithBytes 
_CFStringCreateImmutableFunnel3 
_CFRuntimeCreateInstance. 

而且我不知道如何解決呢?

+0

你以後發佈'fileList'嗎? –

回答

4

你的文件管理器的分配然後釋放罰款。但是

fileList=[[fileManager contentsOfDirectoryAtPath:DOCUMENTS_FOLDER error:nil] retain];

您現在有一個保留的數組。你必須稍後釋放它。如果你不這樣做,你會有泄漏。

2

拇指內存管理的規則很簡單:

allocretaincopy,或new,你必須有一個相應的releaseautorelease

要調用保留在這裏:

fileList=[[fileManager contentsOfDirectoryAtPath:DOCUMENTS_FOLDER error:nil] retain]; 

,但你不鬆開。

+0

如果重寫以下代碼:fileList = [fileManager contentsOfDirecotryAtPath:DOCUMENT_FOLDER error:nil];它也是泄漏!怎麼樣? – scofield

+0

@scofield:同樣的方法。您必須稍後保留或複製它,然後才能釋放它。使用儀器的泄漏模板 - 特別是對象歷史記錄功能 - 查看您正在泄漏什麼以及如何泄漏。 –