Допустим, я хочу, чтобы все было хорошо и быстро в основном пользовательском интерфейсе, поэтому я делю медленные части на очереди (используя глобальные параллельные очереди). Предположим, что selectedUser в этом случае остается неизменным.
В одном View Controller у меня есть что-то вроде этого:
- (IBAction)buttonPressed:(id)sender {
User *selectedUser = [self getSelectedUser];
dispatch_queue_t queue;
queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
@autoreleasepool {
[userManager doSomething:selectedUser withForceOption:YES];
}
});
}
А в другом классе я определил синглтон (userManager) с помощью метода, подобного этому:
- (void)doSomething:(User*)user withForceOption:(BOOL)force {
SAppDelegate *delegate = (SAppDelegate *)[UIApplication sharedApplication].delegate;
extlib_main_queue = delegate.extlib_main_queue;
dispatch_async(extlib_main_queue, ^{
@autoreleasepool {
extlib_status_t status;
user.opIsStarting = YES;
extlib_call_id callId = -1;
// this is the part that worries me:
extlib_str_t uri = extlib_str((char *) [[NSString stringWithFormat:@"http:%@@%s", user.account,DOMAIN] UTF8String]);
status = extlib_call_make_call(0, &uri, 0, NULL, NULL, &callId);
}
});
}
У меня вопрос: безопасно ли это делать или мне нужно сделать что-то еще, чтобы убедиться, что параметры переданного экземпляра пользователя остаются доступными для обоих блоков?