我正在尝试初始化一个 dict 变量,但我不明白为什么一种方法有效,而另一种方法无效。
如果 1 一切正常,我可以稍后使用 dict 。
在情况 2 中,它很快就会被释放(它会变成僵尸),如果我稍后尝试使用它(在块外),程序就会崩溃。
这是我为 ios 编写的课程中的一些代码(c++ 与 Objective-c 混合)。
在块内,我尝试以两种不同的方式初始化变量 dict 。
class Data
{
public:
NSMutableDictionary *dict;
void DoSomeStuff()
{
[NSSomeFrameworkTool doSomeStuffWithCompletionHandler:^(NSError *err) {
// case 1 - OK
dict = [[NSMutableDictionary alloc] initWithDictionary:[NSKeyedUnarchiver unarchiveObjectWithFile:@"dict.dat"]];
// case 2 - will crash later if i try to use dict
dict = [NSKeyedUnarchiver unarchiveObjectWithFile:@"dict.dat"]; }];
}
}
这个类有类变量 dict,它在 DoSomeStuff() 方法中被初始化。
该方法从 ios 框架中调用一个方法,该方法使用块(作为回调)来通知我某些任务已完成。
我想知道为什么案例 1 和案例 2 的工作方式不同。也许禁止在块外使用在该块内初始化的引用?
按照 case2 所示的方式执行此操作有什么问题?