我使用这个片段来懒惰地初始化一些变量:
__block Foo *foo;
[self lazilyGetFoo:^{
foo = <initialization here>;
}];
这工作正常。但是,现在初始化例程被移动到一个方法中,并且下面的代码在 EXC_BAD_ACCESS inside 失败loadFoo
,当分配*foo
发生时:
__block Foo *foo;
[self lazilyGetFoo:^{
[Foo loadFoo:&foo]; /* loadFoo method: *foo = <initialization here>; */
}];
原因很清楚——通过应用&
运算符获得的指针的地址在被复制到foo
方法的堆栈时会发生变化。如何解决这个问题?