nac*_*oss 22 reactive-cocoa libextobjc
我知道你应该使用@weakify @strongify来避免保留周期,但我不完全理解它们是如何实现这一目的的?
dus*_*sty 27
预处理前的代码:
@weakify(self)
[[self.searchText.rac_textSignal
map:^id(NSString *text) {
return [UIColor yellowColor];
}]
subscribeNext:^(UIColor *color) {
@strongify(self)
self.searchText.backgroundColor = color;
}];
Run Code Online (Sandbox Code Playgroud)
预处理后的代码:
@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
}];
Run Code Online (Sandbox Code Playgroud)
1:定义一个新的局部变量"self".这将影响全球的影响力.
2:所以这里我们使用局部变量"self" - self_weak_.
提示:
1.如果我们在块中使用self.xxx,我们应该将@strongify(self)放在它上面.
2.不要忘记使用@weakify(self)来定义变量self_weak_.
(PS:我正在努力学习英语.我希望你能理解我在说什么.)
nac*_*oss 19
在写这个问题的时候,我更加注重宏观定义,我认为它可以像你猜测的那样工作.
@weakify创建一个与您传入的相同类型的新弱引用变量,并将原始值赋给它
@strongify创建一个与原始变量匹配的变量,但它存在于本地范围内,并为其分配由@weakify创建的变量
| 归档时间: |
|
| 查看次数: |
8013 次 |
| 最近记录: |