说我有以下方法调用make:
-92.36699
Foo包含:
[[[[Foo init] addString:@"one"] addString:@"one"] addString:@"three"]
假设我想等到所有@implementation Foo {
NSString *string;
}
- (void)addString:(NSString *)text {
string = [string stringByAppendingString:text];
}
方法都完成并想打印“onetwothree”,但我不知道要调用多少次addString
。我怎么做到这一点?我尝试使用addString
执行此操作,如下所示:
dispatch_group
但这会打印出来:
一 最终字符串: 二 三
知道如何完成这项工作吗?
答案 0 :(得分:0)
如果您确实想使用异步处理,可以这样做:
#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];