【发布时间】:2014-01-31 00:53:18
【问题描述】:
我想知道其他人是否对 Reactive Cocoa listenForNotification 方法有一些问题。 我正在使用以下代码经历保留周期,并且从未调用我的 viewController dealloc 方法。 如果我不听那个通知,我的 viewController 就会被正确地释放
这是更新的完整代码块,我在其中调用方法来监听通知:
RACSignal *postSignal = [RACSignal empty];
postSignal = [[[[NSNotificationCenter defaultCenter] rac_addObserverForName:kNotification object:self.conversation] takeUntil:self.rac_willDeallocSignal]] bind:^RACStreamBindBlock{
return ^RACSignal *(NSNotification *note, BOOL *stop) {
XXStatus status = [note.userInfo[@"status"] longValue];
if (status == XXStatusPosted) {
*stop = YES;
return [RACSignal empty];
} else {
return [RACSignal error:note.userInfo[@"error"]];
}
};
[[[[RACSignal merge:@[uploadSignal, postSignal]] deliverOnMain] subscribeCompleted:^{
[self doSomethingX];
} error:^(NSError *error) {
[self doSomethingOnFail:error];
}] autoDispose:self];
您知道 RAC 内存管理如何用于收听通知吗?其中通知中心是应用程序中的默认通知中心。该方法包含在 NSObject 类的类别扩展中。
感谢您的回答。
【问题讨论】:
-
该代码列表中没有来自 ReactiveCocoa 库的代码。
-
忘记提及该方法属于 NSObject 类的类别,执行以下操作:[[notificationCenter rac_addObserverForName:name object:object] takeUntil:self.rac_willDeallocSignal] ... 将编辑我的问题谢谢
-
仍然没有足够的代码来帮助你。大概您正在订阅您发布的代码行返回的信号;如果是这样,那么向我们展示订阅块的正文会对您有所帮助。
-
感谢 Eric,我已经更新了我的帖子以包含更多信息。这就是我用来收听通知的基本结构。我还发布了我们稍后所做的,将信号与其他信号合并。希望这会有所帮助,我仍在经历保留周期。
-
只是一个旁注。无需将 [RACSignal empty] 分配给变量,然后立即将其替换为另一个值。
标签: ios reactive-cocoa