In this question, tôi được hỏi về đoạn mã sau và duy trì chu kỳ:tài liệu tham khảo yếu trong khối và duy trì chu kỳ
__weak Cell *weakSelf = self;
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
UIImage *image = /* render some image */
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[weakSelf setImageViewImage:image];
}];
}];
[self.renderQueue addOperation:op];
Tất cả các câu trả lời nêu rằng việc sử dụng một tài liệu tham khảo yếu ở đây là không cần thiết, vì mã này không dẫn đến một giữ chu kỳ. Tuy nhiên, trong khi thử nghiệm với một số mã khác, sau đây không dẫn đến một chu kỳ giữ lại (nếu tôi không sử dụng một tài liệu tham khảo yếu, bộ điều khiển xem hiện tại được không deallocated)
//__weak ViewController *weakSelf = self;
MBItem *close = [[MBItem alloc] initWithBlock:^{
[self dismissModalWithDefaultAnimation:NO];
}];
NSMutableArray *items = [[NSMutableArray alloc] initWithObjects:close, nil];
[self.childObject setItems:items];
Tại sao thứ hai một kết quả trong một chu kỳ giữ lại nhưng không phải là chu kỳ đầu tiên?
Từ khóa là "Giữ lại CYCLE". Như trong, tôi giữ bạn và bạn giữ lại tôi, vì vậy ai cho phép đi đầu tiên? –