0
我想編寫一個簡單的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)
TO
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
......系統運行時沒有呃逆。
我想知道:
如何讓我的背景隊列工作。我在這裏做錯了什麼?
如果我使用dispatch_get_global_queue,如果有多個,回來 備份文件訪問請求,我怎麼能保證操作 依次進行?
工作。非常感謝。但是,鎖沒有問題。鎖按原樣工作。 – metsburg 2013-04-22 10:07:51