我有一个方法设置如下:
// -------------------------------------------------------------------------------
- (void)removeEventMs58:(NSManagedObject *)currentObject commit:(BOOL)commit
{
NSLog (@" ");
NSLog (@" ");
NSLog (@"PEC_ManagedObjectController remove EventMs58");
__block NSString * identEvent = [currentObject valueForKey:@"event58Identifier"];
NSLog(@"remove EventMs58 identEvent: %@", identEvent);
if ( ![identEvent length]) return;
[self performSelectorOnMainThread:@selector(setupCalendarDefaults:) withObject:nil waitUntilDone:YES];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
NSError *error = nil;
NSArray *theEvents = [eventStore calendarItemsWithExternalIdentifier:identEvent];
NSLog(@"remove EventMs58 theEvents: %@", theEvents);
for (EKEvent *anEvent in theEvents)
{
NSLog(@"remove EventMs58 before saveEvent");
if (commit) setUpCalendarCreatedOwnChange = YES;
if ([eventStore removeEvent:anEvent span:EKSpanFutureEvents commit:YES error:&error] )
{
NSLog(@"remove EventMs58 success saveEvent");
}
NSLog(@"after saveEvent error: %@",error);
NSLog(@" ");
NSLog(@" ");
}
});
}
例如,这个方法可以连续快速调用14次。
与14个不同的" identEvent"字符串。同样在调用此方法之间,类似的方法可能会对代码启动相同的开头(__block NSString * identEvent)可能进一步混合" identEvent"字符串,当然在单个线程中不是问题。
我的问题是,因为这个dispatch_async是在不同的和/或更晚的时间执行的(这个方法很快就会返回),使用这种方法的应用程序(或应用程序)如何保持identEvent字符串笔直,以便它不会混淆使用dispatch_async运行的这个不同线程中的identEvent字符串?它如何确保" identEvent"一路上没有解除分配? (可能是14次不同的时间)在执行dispatch_async线程之前?
答案 0 :(得分:1)
使用这种方法的应用程序(或应用程序)如何保持identEvent字符串的直接性,以便它不会混淆使用dispatch_async运行的这个不同线程中的identEvent字符串?
它如何确保“identEvent”在此过程中不被释放? (可能是14次不同的时间)在执行dispatch_async线程之前?