美文网首页
ReactiveCocoa内存管理

ReactiveCocoa内存管理

作者: Zz7777777 | 来源:发表于2017-05-17 09:01 被阅读35次

1.我们创建的管道是如何被保存的么?

ReactiveCocoa设计的目的之一是允许这样一种编程样式,即管道可以匿名创建。到目前为止,我们的管道都是这么处理的。为了支持这种模式,ReactiveCocoa维护了一个全局的信号集合。如果信号有一个或多个订阅者,它就是可用的。如果所有订阅者都被移除了,信号就被释放了。

2.如何取消对信号的订阅?

在一个completed事件或error事件后,一个订阅者会自动将自己移除。手动移除可能通过RACDisposable来完成。RACSignal的所有订阅方法都返回一个RACDisposable实例,我们可以调用它的dispose方法来手动移除订阅者。如下代码所示:

RACSignal *backgroundColorSignal =[self.searchText.rac_textSignal

map:^id(NSString *text) {return[self isValidSearchText:text] ?[UIColor whiteColor] : [UIColor yellowColor];

}];

RACDisposable*subscripion =[backgroundColorSignal subscribeNext:^(UIColor *color) {

self.searchText.backgroundColor=color;

}];//在某个位置调用[subscripion dispose];

当然实际上我们不需要这样来写,只需要知道是这么回事就行。

注意:如果我们创建了一个管道,但不去订阅它,则管理永远不会执行,包括任何如doNext:块这样的附加操作。

3.避免循环引用

ReactiveCocoa框架给我们提供了一个更好的选择。首先导入以下头文件:

#import

然后使用以下代码:

@weakify(self)

[[self.searchText.rac_textSignal map:^id(NSString *text) {return[self isValidSearchText:text] ?[UIColor whiteColor] : [UIColor yellowColor];

}] subscribeNext:^(UIColor *color) {

@strongify(self)

self.searchText.backgroundColor=color;

}];

@weakify(self);// 定义了一个__weak的self_weak_变量

[RACObserve(self, name) subscribeNext:^(NSString *name) {

@strongify(self);// 局域定义了一个__strong的self指针指向self_weak

self.outputLabel.text = name;

}];

宏@weakify与@strongify在Extended Objective-C库中引用,它们包含在ReactiveCocoa框架中。@weakify允许我们创建一些影子变量,它是都是弱引用(可以同时创建多个),@strongify允许创建变量的强引用,这些变量是先前传递给@weakify的。

相关文章

  • ReactiveCocoa内存管理

    1.我们创建的管道是如何被保存的么? ReactiveCocoa设计的目的之一是允许这样一种编程样式,即管道可以匿...

  • ReactiveCocoa学习笔记二

    内存管理 ReactiveCocoa自己持有全局的所有信号,如果一个信号有一个或多个订阅者,那么这个信号就是活跃的...

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

  • 第10章 内存管理和文件操作

    1 内存管理 1.1 内存管理基础 标准内存管理函数堆管理函数虚拟内存管理函数内存映射文件函数 GlobalMem...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

  • JavaScript —— 内存管理及垃圾回收

    目录 JavaScript内存管理内存为什么需要管理?内存管理概念JavaScript中的内存管理JavaScri...

  • OC - OC的内存管理机制

    导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...

  • 3. 内存管理

    内存管理 内存管理包含: 物理内存管理; 虚拟内存管理; 两者的映射 除了内存管理模块, 其他都使用虚拟地址(包括...

  • Go语言——内存管理

    Go语言——内存管理 参考: 图解 TCMalloc Golang 内存管理 Go 内存管理 问题 内存碎片:避免...

  • IOS开发常用第三方库

    Objective-C ReactiveCocoa 懂的自然懂 IQKeyboardManager 键盘管理 SV...

网友评论

      本文标题:ReactiveCocoa内存管理

      本文链接:https://www.haomeiwen.com/subject/veorxxtx.html