Edit-Refactor->Convert to ARC を使用して、非 ARC プロジェクトを ARC に変更しました。この方法で呼び出される関数を除いて、すべてのリークがなくなりました。
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(DownloadAll)
object:nil];
operation.queuePriority=NSOperationQueuePriorityVeryHigh;
[queue addOperation:operation];
そしてここに関数があります:
-(void)DownloadAll{
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath;
bool fileExists;
NSString * strSelect = [NSString stringWithFormat:@"SELECT NoOfAyas from tbSura"];
NSMutableArray * marrItems = [gObj.sqlObj selStatement:strSelect :1];
for (int i =1; i<=114; i++) {
documentsPath = [NSString stringWithFormat:@"%@/%@/%i",[paths objectAtIndex:0],DefaultReader,i];
fileExists = [[NSFileManager defaultManager] fileExistsAtPath:documentsPath];
if (!fileExists)
[[NSFileManager defaultManager] createDirectoryAtPath:documentsPath withIntermediateDirectories:YES attributes:nil error:nil];
for (int j =1; j<=[[marrItems objectAtIndex:i-1] intValue]; j++) {
int indx=[ReadersIDs indexOfObject:DefaultReader];
NSString *str=[NSString stringWithFormat:@"%@%i/%i.mp3",[ReadersPaths objectAtIndex:indx],i,j];
documentsPath = [NSString stringWithFormat:@"%@/%@/%i/%@",[paths objectAtIndex:0],DefaultReader,i,[str lastPathComponent]];
fileExists = [[NSFileManager defaultManager] fileExistsAtPath:documentsPath];
if (!fileExists) {
@autoreleasepool {
NSError *err;
NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:str] options:0 error:nil];
if (err) {
NSLog(@"%@",err);
}
if(!data)
NSLog(@"Aya : %i %i",i,j);
else
[data writeToFile:documentsPath atomically:YES];
}
}
}
}
}
メモリは、時間とダウンロードされたオブジェクトに応じて増加し、メモリ警告を受け取った後にクラッシュします
事前にご協力いただきありがとうございます。