【发布时间】:2016-02-22 15:36:57
【问题描述】:
我猜代码本身解释了一切,所以看看下面的代码。
-(RACSignal *)bossMethod {
@weakify(self)
return [[[self method1] flattenMap:^RACStream *(id value) {
@strongify(self)
return [self method2];
}] flattenMap:^RACStream *(id value) {
@strongify(self)
return [self method3];
}];
}
基本上,我将信号链接起来以逐步执行多种方法。但是方法 3 根本没有被调用。所以我坚持下去,发现 self 在[self method3] 即将接到电话的时候变成了 nil。它是怎么发生的?为什么@strongify(self) 在这种情况下不起作用?如有任何建议,我将不胜感激。
【问题讨论】:
-
这是预期的行为,
@weakify让你弱捕获自我,@strongify将弱变量变为强变量。所以如果弱变量本身是nil,那么强变量也一定是nil。 -
不,我不这么认为。如果 self 本身为 nil,则不应运行任何方法,但方法 1 和方法 2 运行 find 但不运行方法 3
-
如果[self method2]返回的信号在self的dealloc之后存活并发送一些值,这是完全可能的。
标签: ios signals reactive-cocoa