У меня есть свойство isFinished
только для чтения в моем файле интерфейса:Присвоение Ивар в блоке с помощью слабого указателя
typedef void (^MyFinishedBlock)(BOOL success, NSError *e);
@interface TMSyncBase : NSObject {
BOOL isFinished_;
}
@property (nonatomic, readonly) BOOL isFinished;
и я хочу, чтобы установить его на YES
в блоке в какой-то момент позже, не создавая сохранить цикл 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
}
Я не уверен, что это правильный способ сделать это. Будет ли этот код протекать или ломаться, или это нормально? Возможно, есть более простой способ, который я забыл?
просто FYI, вы можете использовать '__weak TypeOf (само) * weakSelf = я;' –
здорово, это полезно! – manmal
Небольшая поправка к общей декларации '__weak typeof (self) weakSelf = self;' typeof (self) уже является указателем. – allprog