我想初始化一个dict变量,但我不明白为什么一种方式有效,而另一种不行。初始化一个块内的对象
如果情况1一切正常,我可以稍后使用dict。
在情况2中,它很快就会被释放(它将成为僵尸),如果我稍后尝试使用它(在块之外),程序将崩溃。
下面是我的类(C++与Objective-C混合)为ios编写的一些代码。
块内我试图以两种不同的方式初始化变量字典。
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中显示的方式有什么问题吗?
什么行代码导致实际崩溃? – 2011-12-19 15:33:55
嗨大卫。没有这些线。我的意思是,当我想稍后在块外使用字典时 - 例如用另一种方法:DoSomeStuff2(){[dict count]; }。它会崩溃 – majakthecoder 2011-12-19 15:39:10
你使用ARC吗? – 2011-12-19 15:49:41