2013-03-20 36 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