Tôi hơi bối rối về việc sử dụng khối trong Objective-C. Tôi hiện đang sử dụng ARC và tôi có khá nhiều khối trong ứng dụng của mình, hiện tại luôn đề cập đến self
thay vì tham chiếu yếu. Có thể đó là nguyên nhân của các khối này giữ lại self
và giữ cho nó khỏi bị xử lý? Câu hỏi là, tôi có nên luôn luôn sử dụng một weak
tài liệu tham khảo self
trong một khối?
-(void)handleNewerData:(NSArray *)arr
{
ProcessOperation *operation =
[[ProcessOperation alloc] initWithDataToProcess:arr
completion:^(NSMutableArray *rows) {
dispatch_async(dispatch_get_main_queue(), ^{
[self updateFeed:arr rows:rows];
});
}];
[dataProcessQueue addOperation:operation];
}
Quá trình xử lý.h
@interface ProcessOperation : NSOperation
{
NSMutableArray *dataArr;
NSMutableArray *rowHeightsArr;
void (^callback)(NSMutableArray *rows);
}
ProcessOperation.m
-(id)initWithDataToProcess:(NSArray *)data completion:(void (^)(NSMutableArray *rows))cb{
if(self =[super init]){
dataArr = [NSMutableArray arrayWithArray:data];
rowHeightsArr = [NSMutableArray new];
callback = cb;
}
return self;
}
- (void)main {
@autoreleasepool {
...
callback(rowHeightsArr);
}
}