我是这个网站的新手,希望你能提供帮助。
我从function()中的以下代码中得到EXC_BAD_ACCESS错误:
typedef int (^BlockDef)();
BlockDef getBlockDef(int d)
{
BlockDef def = Block_copy(^()
{
return d;
});
return def;
}
void function()
{
BlockDef def1 = getBlockDef(1);
BlockDef def2 = getBlockDef(2);
printf("%d\n",def1());
printf("%d\n",def2());
NSMutableArray * arr = [NSMutableArray array];
[arr addObject:def1];
[arr addObject:def2];
printf("%d\n",((BlockDef) [arr objectAtIndex:0])()); // **** EXC_BAD_ACCESS here
printf("%d\n",((BlockDef) [arr objectAtIndex:1])());
}
此代码在iphone中运行没有任何问题,但在ipad中没有。可能是什么问题?
此外,在ipad中,当我删除Block_copy调用时,它会成功运行同一行。这很奇怪,因为不能返回或不应该调用非复制函数(在iphone中,在这种情况下,我在第一次打印时得到EXC_BAD_ACCESS)。
感谢您的协助。
答案 0 :(得分:1)
当你说iPad时,你的意思是3.2吗?如果是这样,这将无效。 3.2中有一个半完成的块API,可以让你做任何事情,除了复制块。
如果你的iPad是4.2,但这仍然不起作用,请告诉我。