我在我的图书馆暴露2方法调用如下:如果方法已经在串行队列中执行,是否需要使用锁定?
-(void) createFile {
dispatch_async(serialQueue, ^{
[fileObj createFile:fileInfo completion:^(void){
//completion block C1
}];
});
}
-(void) readFile:(NSUInteger)timeStamp {
dispatch_async(serialQueue, ^{
[fileObj readFile:timeStamp completion:^(void){
//completion block C2
}];
});
}
现在createFile:fileInfo:completion
和readFile:timeStamp:completion
是在调用到进程P1
转XPC电话。他们的进程P1内实施看起来是这样的:
@interface FileObject : NSObject
+ (instancetype) sharedInstance;
@property (nonatomic, strong) NSData *fileContents;
@end
@implementation FileObject
+ (instancetype)sharedInstance
{
static FileObject *sharedObj = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedObj = [[self alloc] init];
});
return sharedObj;
}
- (void)createFile:(FileInfo *)fileInfo
completion:(void (^))completion {
FileObject *f = [FileObject sharedInstance];
//lock?
f.fileContents = //call some method;
//unlock
}
- (void)readFile:(NSUInteger)timeStamp
completion:(void (^))completion {
FileObject *f = [FileObject sharedInstance];
//do stuff with f.fileContents
}
@end
要注意的一点是,使用createFile
(串行队列之后方法createFile
调用能够进行修改的单身OBJ和readFile:fileInfo
总是叫在调用)。
我的问题,给出了在我的图书馆暴露了两个方法串行队列使用,
- 我还需要锁,当我在
readFileInfo:FileInfo:completion
修改f.fileContents
解锁? - 如果有多个不同的进程调用到我的库中,该怎么办? XPC将
P1
自动处理,还是需要我做点什么?