, -(void)useGadgetsOnWidgets { ... }.
ARC, , (.. useGadgetsOnWidgets ), , :
static widget . , -useGadgetsOnWidgets ( ), , . , / ( , __block:
-(void)useGadgetsOnWidgets {
static Widget *widget;
widget = [self buildNewWidget];
for(Gadget *gadget in self.gadgets) {
[self useGadget:gadget withCallback:^{
if([widget isBroken]) {
widget = [self buildNewWidget];
}
gadget.widget = widget;
}];
}
widget = nil;
}
, , :
-(void)useGadgetsOnWidgets {
Widget *widget = [self buildNewWidget];
Widget ** pWidget = &widget;
for(Gadget *gadget in self.gadgets) {
[self useGadget:gadget withCallback:^{
if([*pWidget isBroken]) {
*pWidget = [self buildNewWidget];
}
gadget.widget = *pWidget ;
}];
}
}
, static ( ), - . ( , ).
:. , , ivar/property self:
-(Widget*)workingWidget {
if ([_cachedWidget isBroken]) {
_cachedWidget = [self buildWidget];
}
return _cachedWidget;
}
-(void)useGadgetsOnWidgets {
for(Gadget *gadget in self.gadgets) {
[self useGadget:gadget withCallback:^{
gadget.widget = [self workingWidget];
}];
}
}