mam tylko do odczytu właściwości isFinished
w moim pliku interfejs:Przypisanie do Ivar w bloku poprzez słabym wskaźnikiem
typedef void (^MyFinishedBlock)(BOOL success, NSError *e);
@interface TMSyncBase : NSObject {
BOOL isFinished_;
}
@property (nonatomic, readonly) BOOL isFinished;
i chcę ustawić go YES
w bloku w pewnym momencie później, bez tworzenia zachować cykl do self
:
- (void)doSomethingWithFinishedBlock:(MyFinishedBlock)theFinishedBlock {
__weak MyClass *weakSelf = self;
MyFinishedBlock finishedBlockWrapper = ^(BOOL success, NSError *e) {
[weakSelf willChangeValueForKey:@"isFinished"];
weakSelf -> isFinished_ = YES;
[weakSelf didChangeValueForKey:@"isFinished"];
theFinishedBlock(success, e);
};
self.finishedBlock = finishedBlockWrapper; // finishedBlock is a class ext. property
}
jestem pewien, że jest to dobry sposób, żeby to zrobić. Czy ten kod wycieknie, czy pęknie, czy jest w porządku? Być może jest łatwiejszy sposób, który przeoczyłem?
tylko FYI, można użyć '__weak typeof (self) * weakSelf = siebie;' –
cool, to przydatne! – manmal
Mała poprawka do ogólnej deklaracji '__weak typeof (self) weakSelf = self;' typeof (self) jest już wskaźnikiem. – allprog