我明白你应该使用@weakify @strongify来避免保留周期,但是我不完全明白他们如何实现这一点?
预处理前的代码:
原文链接:https://www.f2er.com/react/301797.html@weakify(self) [[self.searchText.rac_textSignal map:^id(NSString *text) { return [UIColor yellowColor]; }] subscribeNext:^(UIColor *color) { @strongify(self) self.searchText.backgroundColor = color; }];
预处理后的代码:
@autoreleasepool {} __attribute__((objc_ownership(weak))) __typeof__(self) self_weak_ = (self); [[self.searchText.rac_textSignal map:^id(NSString *text) { return [UIColor yellowColor]; }] subscribeNext:^(UIColor *color) { @try {} @finally {} __attribute__((objc_ownership(strong))) __typeof__(self) self = self_weak_; // 1 self.searchText.backgroundColor = color; //2 }];
1:定义一个新的局部变量“self”。这将影响全球。
2:所以在这里我们使用局部变量“self” – self_weak_。
提示:
如果我们在块中使用了self.xxx,我们应该放置@strongify(self)。
不要忘记使用@weakify(self)来定义变量self_weak_。
(PS:我正在学英文。我希望你能明白我在说什么。)