我正在尝试编写一个简单的 iPhone 应用程序,对应用程序沙箱中的文件内容进行一些修改。
我需要让这个过程变得懒惰。确保连续文件添加/修改操作的序列化也很重要。
我有这个方法:
#import "ProcessData.h"
#import <dispatch/dispatch.h>
@interface ProcessData ()
@end
dispatch_queue_t backgroundQueue;
NSLock *lock;
@implementation ProcessData
-(int)newEffects: (int) idNo : (NSString*) someData
{
[lock lock];
dispatch_async(backgroundQueue, ^(void)
{
@try
{
DiskAccess *dAccess = [[DiskAccess alloc] init];
//some operations here
[dAccess release];
}
@catch (NSException *exception)
{
}
@finally
{
printf("done with this stuff!");
}
})
[lock release];
}
@end
当我运行此代码时,应用程序会毫不客气地崩溃,我会看到:
0x1b1f2b5: cmpl $1, 36(%esi) Thread 1: EXC_BAD_ACCESS(code=2,address=0x24)
但是,如果我换行:
dispatch_async(backgroundQueue, ^(void)
至
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
...系统运行没有打嗝。
我想知道:
如何让我的后台队列工作。我在这里做错了什么?
如果我使用dispatch_get_global_queue并且如果有多个背靠背文件访问请求,我如何确保操作按顺序执行?