链接多个方法调用,并等待在Objective-C中完成所有调用
假设我要进行以下方法调用:链接多个方法调用,并等待在Objective-C中完成所有调用,objective-c,grand-central-dispatch,Objective C,Grand Central Dispatch,假设我要进行以下方法调用: [[[[Foo init] addString:@"one"] addString:@"one"] addString:@"three"] 其中Foo包含: @implementation Foo { NSString *string; } - (void)addString:(NSString *)text { string = [string stringByAppendingString:text]; } 假设我想等到所有的addString方法都
[[[[Foo init] addString:@"one"] addString:@"one"] addString:@"three"]
其中Foo包含:
@implementation Foo {
NSString *string;
}
- (void)addString:(NSString *)text {
string = [string stringByAppendingString:text];
}
假设我想等到所有的addString
方法都完成后再打印“onetwotree”,但我不知道要调用多少次addString
。我将如何实现这一点?我尝试使用dispatch\u group
执行此操作,如下所示:
@implementation Foo {
NSString *string;
}
- (id)init {
// setup
[self complete];
string = @"";
}
- (void)addString:(NSString *)text {
dispatch_group_async(group, queue, ^ {
string = [string stringByAppendingString:text];
NSLog(@"%@", text);
}
}
- (void)complete {
dispatch_group_notify(group,queue, 0), ^ {
NSLog(@"Final String: %@", string);
});
}
但这表明:
一个
最终字符串:
两个
三
你知道我该怎么做吗?如果你想使用异步处理,你可以这样做:
#import "Foo.h"
@implementation Foo {
NSString *_string;
dispatch_group_t _group;
dispatch_queue_t _queue;
}
- (instancetype)init
{
self = [super init];
if (self) {
_string = @"";
_group = dispatch_group_create();
_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
}
return self;
}
- (void)addStrings:(NSArray *)strings {
dispatch_group_async(_group, _queue, ^() {
NSMutableString *result = [NSMutableString new];
for (NSString *str in strings) {
[result appendString:str];
}
_string = [result copy];
});
}
- (void)complete {
dispatch_group_notify(_group, _queue, ^ {
NSLog(@"Final String: %@", _string);
});
}
Foo *foo = [[Foo alloc] init];
[foo addStrings:@[@"one", @"two", @"three"]];
[foo complete];
请这样称呼:
#import "Foo.h"
@implementation Foo {
NSString *_string;
dispatch_group_t _group;
dispatch_queue_t _queue;
}
- (instancetype)init
{
self = [super init];
if (self) {
_string = @"";
_group = dispatch_group_create();
_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
}
return self;
}
- (void)addStrings:(NSArray *)strings {
dispatch_group_async(_group, _queue, ^() {
NSMutableString *result = [NSMutableString new];
for (NSString *str in strings) {
[result appendString:str];
}
_string = [result copy];
});
}
- (void)complete {
dispatch_group_notify(_group, _queue, ^ {
NSLog(@"Final String: %@", _string);
});
}
Foo *foo = [[Foo alloc] init];
[foo addStrings:@[@"one", @"two", @"three"]];
[foo complete];
为什么不使用简单循环?停止条件是什么?循环通过数组,其中包含要连接的单词,在退出输出时生成字符串这里的问题是,我没有ping循环以开始迭代单词的事件。检查我的答案