Tôi có một chỉ đọc tài sản isFinished
trong file giao diện của tôi:Chuyển nhượng để Ivar trong một khối thông qua con trỏ yếu
typedef void (^MyFinishedBlock)(BOOL success, NSError *e);
@interface TMSyncBase : NSObject {
BOOL isFinished_;
}
@property (nonatomic, readonly) BOOL isFinished;
và tôi muốn đặt nó vào YES
trong một khối tại một số điểm sau, mà không cần tạo một chu kỳ giữ chân đến 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
}
Tôi không chắc chắn đây là cách phù hợp để thực hiện. Mã này có bị rò rỉ hoặc bị hỏng hay không? Có lẽ có một cách dễ dàng hơn tôi đã bỏ qua?
chỉ cần fyi, bạn có thể sử dụng '__weak typeof (self) * weakSelf = self;' –
tuyệt, hữu ích! – manmal
Chỉnh sửa nhỏ cho khai báo chung '__weak typeof (self) weakSelf = self;' typeof (self) đã là một con trỏ. – allprog