1つのブロックの複数の呼び出しでオブジェクト参照を再利用したいのですが、興味があります。次の2つのアプローチの実際的な違いは何ですか。
__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;
}];
}
明らかに、これらの2つのコードのチャンクはセマンティックの観点からは異なりますが、(実際には)同じ基本的な作業を行っていると思います。私の推測では、メモリ管理の観点、パフォーマンスの観点、または他の何かとの違いがあります。これらの違いを説明する(または違いがない理由を説明する)洞察があれば役立ちます。