Do not use dispatch_io_write as it generate random crashes
Either it's buggy under iOS or I didn't use it the right way...
This commit is contained in:
parent
73df9d7281
commit
a8a9b12896
|
@ -117,7 +117,6 @@ static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week
|
|||
if (toDisk)
|
||||
{
|
||||
dispatch_queue_t queue = dispatch_queue_create(kDiskIOQueueName, nil);
|
||||
|
||||
dispatch_async(queue, ^
|
||||
{
|
||||
NSData *data = imageData;
|
||||
|
@ -136,32 +135,15 @@ static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week
|
|||
|
||||
if (data)
|
||||
{
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:_diskCachePath])
|
||||
// Can't use defaultManager another thread
|
||||
NSFileManager *fileManager = NSFileManager.new;
|
||||
|
||||
if (![fileManager fileExistsAtPath:_diskCachePath])
|
||||
{
|
||||
[[NSFileManager defaultManager] createDirectoryAtPath:_diskCachePath
|
||||
withIntermediateDirectories:YES
|
||||
attributes:nil
|
||||
error:NULL];
|
||||
[fileManager createDirectoryAtPath:_diskCachePath withIntermediateDirectories:YES attributes:nil error:NULL];
|
||||
}
|
||||
|
||||
NSString *path = [self cachePathForKey:key];
|
||||
dispatch_io_t ioChannel = dispatch_io_create_with_path(DISPATCH_IO_STREAM, [path UTF8String], O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, queue, nil);
|
||||
dispatch_data_t dispatchData = dispatch_data_create(data.bytes, data.length, queue, ^{[data self];});
|
||||
|
||||
dispatch_io_write(ioChannel, 0, dispatchData, queue, ^(bool done, dispatch_data_t dispatchedData, int error)
|
||||
{
|
||||
if (error != 0)
|
||||
{
|
||||
NSLog(@"SDWebImageCache: Error writing image from disk cache: errno=%d", error);
|
||||
}
|
||||
if(done)
|
||||
{
|
||||
dispatch_io_close(ioChannel, 0);
|
||||
}
|
||||
});
|
||||
|
||||
dispatch_release(dispatchData);
|
||||
dispatch_release(ioChannel);
|
||||
[fileManager createFileAtPath:[self cachePathForKey:key] contents:data attributes:nil];
|
||||
}
|
||||
});
|
||||
dispatch_release(queue);
|
||||
|
|
Loading…
Reference in New Issue