2013-03-20 169 views
2
NSData * buffer = [fileHandle readDataOfLength:chunkSize]; 
       while ([buffer length] > 0) 
       { 
        [streamBIG writeData:buffer]; 
        offset += [buffer length]; 

        [fileHandle seekToFileOffset:offset]; 
        buffer = [fileHandle readDataOfLength:chunkSize]; 
       } 

我使用這些特定的工藝來壓縮更多的則1個文件的25 - 30 MB,但這些增加的內存,即現場字節不斷增加,直到所有的文件都沒有寫,因爲其中,我的應用程序崩潰,一大批大型文件創建泄漏而創建的zip文件

+2

可不可以給多一點背景:什麼是'fileHandle'和'streamBig',一個你是否使用ARC?它看起來像你可能可以在你的外觀中使用'@ autoreleasepool',但是。 – gaige 2013-03-20 09:09:48

+0

我沒有使用弧,所以我用autoreleasepool和它的工作,感謝您的答覆。 – Vibhooti 2013-03-20 11:11:09

回答

2

嘗試像這樣具有自動釋放池

   NSData * buffer = [fileHandle readDataOfLength:chunkSize]; 
       while ([buffer length] > 0) 
       { 
        @autoreleasepool 
        { 
        [streamBIG writeData:buffer]; 
        offset += [buffer length]; 

        [fileHandle seekToFileOffset:offset]; 
        buffer = [fileHandle readDataOfLength:chunkSize]; 
        } 
       } 

它會工作...

+0

非常感謝你,它的工作,我把autorelease池放在錯誤的地方,非常感謝 – Vibhooti 2013-03-20 11:10:45