iPhone-大中央调度无效的可变阵列
-
25-10-2019 - |
题
如果我这样做
NSMutableArray *allColors;
NSData *dataColor = [dictPLIST objectForKey:@"allColors"];
if (dataColor != nil) {
allColors = [NSMutableArray arrayWithArray:
[NSKeyedUnarchiver unarchiveObjectWithData:dataColor]];
}
dataColor = nil;
我的AllColors可变阵列具有有效的内容,但是如果我创建一个GGC组并执行此操作...
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_group_t group = dispatch_group_create();
__block NSMutableArray *allColors;
dispatch_group_async(group, queue, ^{
NSData *dataColor = [dictPLIST objectForKey:@"allColors"];
if (dataColor != nil) {
allColors = [NSMutableArray arrayWithArray:
[NSKeyedUnarchiver unarchiveObjectWithData:dataColor]];
}
dataColor = nil;
});
// .... other stuff is added to the group
dispatch_group_notify(group, queue, ^{
dispatch_group_async(group, queue, ^{
// if I try to access allColors here, the app crashes
});
});
dispatch_release(group);
我想念什么吗?
谢谢。
解决方案
您正在创建一个自我发行的数组,并且在第一个块执行和第二个块执行时,Autorelease池在某个时候被GCD排干。
每当您进行并发编程时,无论是通过线程还是使用GCD,您都会 必须始终努力保留任何要生存的物体,以超出一个执行范围.
不隶属于 StackOverflow