我想在单个块的多次调用中重用对象引用,我很好奇:以下两种方法之间的实际区别是什么?
使用__block
变量:
__block Widget *widget = [self buildNewWidget];
for(Gadget *gadget in self.gadgets) {
[self useGadget:gadget withCallback:^{
if([widget isBroken]) {
widget = [self buildNewWidget];
}
gadget.widget = widget;
}];
}
使用static
变量:
for(Gadget *gadget in self.gadgets) {
[self useGadget:gadget withCallback:^{
static Widget *widget;
if(!widget || [widget isBroken]) {
widget = [self buildNewWidget];
}
gadget.widget = widget;
}];
}
显然,这两个代码块从语义角度来看是不同的,但是(实际上)我相信它们做的是相同的基本工作。我的猜测是,从内存管理角度、性能角度或其他角度来看是有区别的。任何说明这些差异(或解释为什么它们没有不同)的见解都会有所帮助。