这一章我们讨论了很多概念,在没有任何实践的基础上来理解这些东西,尤其是一些高级的概念,是比较困难的。下一章,我们将运用我们所获取的这些知识,使她们深入人心。我们将要诠释的不仅仅是我们在这里看到的这些,同时我们也将获得一些ReactiveCocoa的最佳实践。
组播是用语多个订阅者共享一个订阅信号的术语。就像我们上一节所描述的那样,默认的情况下,信号是冷的。有时候,我们不希望一个冷信号在每一次被订阅时工作。这通常在边界效应、订阅所要执行的任务代价昂贵或者只能以其他方式在适当的时间执行时有这种需求。这时网络请求浮现在脑海中。。。 所以与其从这样的信号中创建一个RACMulticastConnection,不如使用RACSignal的publish方法或者m
上一节,我们绑定UIButton的enabled属性并不是最佳实践,因为UIButton增加了一个ReactiveCocoa的类和一条指令。在这一节中我们将介绍ReactiveCocoa的指令。实际上button的rac_command可以为我们监控enabled属性。 应用一段ReactiveCocoa的文档: 指令,RACCommand类的代表,创建并订阅动作的信号响应,可以很容易地实现一些用
当你随时都想知道某一个值的改变时(不管是next、error或者completion),你就会订阅流—-一种最常见的signal.使用信号通常都会有副作用,比如下面这个例子。 我们添加一个textfield控件到viewController’s View上,这里我使用storyboard来做,你怎么做随你喜好。 在ViewDidLoad中添加如下代码,订阅textfield的rac_textS
信号是另一种类型的流。与序列流相反,信号是push-driven的。新的值能够通过管道发布但不能像pull-driven一样在管道中获取,他们所抽象出来的数据会在未来的某个时间传送过来。 这里需要理解两个概念:pull-driven和push-driven. Push-driven means that values for the signal are not defined at the mo
1.3 Kali Linux简介 Kali Linux的前身是BackTrack Linux发行版。Kali Linux是一个基于Debian的Linux发行版,包括很多安全和取证方面的相关工具。它由Offensive Security Ltd维护和资助,最先由Offensive Security的MatiAharoni和Devon Kearns通过重写Back Track来完成。Back Tra
18.4 systemd-journald.service 简介 过去只有 rsyslogd 的年代中,由于 rsyslogd 必须要开机完成并且执行了 rsyslogd 这个 daemon 之后,登录文件才会开始记录。所以,核心还得要自己产生一个 klogd 的服务, 才能将系统在开机过程、启动服务的过程中的信息记录下来,然后等 rsyslogd 启动后才传送给它来处理~ 现在有了 system
简单模式 我们将从最简单的正则表达式学习开始。由于正则表达式常用于字符串操作,那我们就从最常见的任务:字符匹配 下手。 有关正则表达式底层的计算机科学上的详细解释(确定性和非确定性有限自动机),你可以查阅编写编译器相关的任何教科书。
4.6. 类型简介 Go语言中有一些通用的类型,例如"int"和"float",它们对应的内存大小和处理器类型相关。同时, 也包含了许多固定大小的类型,例如"int8"和"float64",还有无符号类型"uint"和"uint32"等。 需要注意的是,即使"int"和"int32"占有同样的内存大小,但并不是同一种数据类型。不过 "byte"和"uint8"对应是相同的数据类型,它们是字符串中字
存储在变量和数组中的数据是临时的,这些数据在程序运行结束后都会消失。文件用来永久地保存大量的数据。计算机把文件存储在二级存储设备中(特别是磁盘存储设备)。本章要讨论怎样用 C++ 程序建立、更新和处理数据文件(包括顺序存储文件和随机访问文件)。我们要比较格式化与“原始数据”文件处理。第19章将介绍从 string 而不是从文件输入和输出数据。
本章介绍异常处理(exception handling)。C++ 的扩展性可能大大增加错误发生的次数和种类。 本章介绍的特性可以让程序员编写更清晰、更健全、更具容错性的程序。利用这类技术开发的新系统已经取得成功。我们还将介绍何时不宜使用异常处理。 本章介绍的异常处理样式和细节基于 Andrew Koenig 和 Bjarne Stroustrup 的论文《Exception Han dling f
本章介绍 C++ 最强大的特性之一 —— 模板。模板使我们可以用一个代码段指定一组相关(重载)函数(称为模板函数)或一组相关类(称为模板类)。 我们可以对数组排序函数编写一个函数模板,然后 C++ 自动生成模板函数,可以对 int 数组、float 数组和字符串数组等等进行排序。 第3章介绍了函数模板。如果读者没有阅读该章,则这里再提供一些介绍和例子。 我们可以对堆栈类编写一个类模板,然后让 C+
C++ 标准库提供了—组扩展的输入/输出(I/O)功能。本章将详细介绍 C++ 中最常用的一些 I/O 操作,并对其余的输入/输出功能做一简要的概述。本章的有些内容已经在前面提到,这里对输入/输出功能做一个更全面的介绍。 本章讨论的许多输入/输出功能都是面向对象的,读者会发现 C++ 的 I/O 操作能够实现许多功能。C++ 式的I/O中还大量利用了C++的其他许多特点,如引用、函数重载和运算符重
虚函数(virtual function)和多态性(Plymorphism)使得设计和实现易于扩展的系统成为可能。程序可以对层次中所有现有类的对象(基类对象)进行一般性处理。程序开发期间不存在的类可以用一般化程序稍作修改或不经修改即加进去,只要这些类属于一般处理的继承层次。程序中惟一要修改的部分是需要直接了解加进层次中的特定类的部分。
本章和下一章要讨论面向对象的程序设计的两个极其重要的功能——继承(inheritance)和多态性(polymorphism)。继承是软件复用的一种形式,实现这种形式的方法是从现有的类建立新类。新类继承了现有类的属性和行为,并且为了使新类具有自己所需的功能,新类还要对这些属性和行为予以修饰。 软件复用缩短了程序的开发时间,促使开发人员复用已经测试和调试好的高质量的软件,减少了系统投入使用后可能出现