OC 和 Swift 混用就是要让 OC 知道 Swift 的类,和让 Swift 知道 OC 的类。
Xcode 的 Build Setting 里有一 Swift Compiler - Code Generation 组,里面有两个 Header 的指定:Objective-C Bridging Header 和 Objective-C Generated Interface Header Name,这两个 Header 使得 OC 和 Swift 可以通讯,现分别介绍:
ReactiveCocoa 简单总结
#### ReactiveCocoa 是什么?
ReactiveCocoa 由 Github的工程师们开发,统一了 Native APP 中事件的等待和响应。
#### 基本概念:RACSignal
ReactiveCocoa 通过对信号(Signal)的订阅(subscribe)、用 Block 来处理事件的等待和响应。信号即被订阅的对象,描述了我们关注的状态的变化。
#### RACSignal 的常用操作与示例
1、-subscribeNext:订阅下一个信号,信号被订阅后才能起作用。
2、-map:映射,信号使用前的预处理。
3、-filter:信号使用前的过滤。
从汉语字面理解 观察者模式 和 订阅者模式 的区别
很多文章都会将 观察者模式 和 订阅者模式 混为一谈,其实他们两个还是有本质区别的。
举例来说:
1、警察与小偷:小偷总是计划着犯罪,警察为了抓到证据(某类信息),不得不在暗处设岗观察,这是观察者模式;
2、读者与邮局:邮局有报纸订阅服务,于是读者去邮局订阅了报纸(某类信息),这是订阅者模式。
由上可见两者区别:
1、订阅者模式下,订阅者被动接受信息、服务提供者主动提供服务;观察者模式下,观察者主动获取信息、被观察者并不知情;
2、订阅者模式 需要在服务提供者处有订阅者列表,观察者模式 在被观察者处则没有 观察者名单列表;
3、订阅者模式 有移除订阅者行为,观察者模式 则没有移除观察者行为;
二者如何实现?
订阅者模式:服务提供者有订阅者列表,并提供订阅和取消订阅的方法,当有信息变化时及时 推送 给订阅者,订阅者接收到信息;
观察者模式:观察者主动 轮询 被观察者的静态信息和动态信息;
结论:
我们今天经常说的观察者模式,其实是订阅者模式,做的是信息流的推送,而非耗资源的轮询,所以 ReactiveCocoa 里面将变化的处理统一为 subscribeNext 方法,是以记。
让 Sublime Text 支持 JavaScript
Sublime Text 默认不支持 JavaScript 的运行,可以通过 Mac 内置的 JavaScript 控制台程序进行 Build System 的自定义:
菜单路径:[Tools]->[Build System]->[New Build System…]
粘贴以下内容并保存为 JavaScriptCore.sublime-build:1
2
3
4{
"cmd": ["/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc", "$file"],
"selector": "source.js"
}
选择 [Tools]->[Build System] 里的 JavaScriptCore,就可以 Build 了。
记得 Build 前先将源码文件保存。
iOS 热修复(HotFix)
iOS 在发现线上 Bug 后,如果通过发紧急版修复,即便审核加速了一般也要1-2天。这简直太痛苦了。
有没有“热修复”的方法呢?如果有,我们就可以在发现的第一时间修复bug了。
可喜的是 bang590 的 JSPatch 已经诞生了,它“使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C 原生方法”。竟然还有人用来进行 “热开发”,不过一般是用来实时修复线上 Bug,并在下一个版本发布的时候将修正代码用原生代码替换。
使用 JSPatch 需要熟悉 JSPatch Script 语法,当然还有 OC 到 JSPatch 的转换器可用。难点在于JSPatch Script 的语法。
小团队不建议自己搭建 JSPatch 的服务器,可以使用 JSPatch Platform。
相关资料:
1、JSPatch Platform: http://jspatch.com
2、JSPatch 工程: https://github.com/bang590/JSPatch
3、JSPatch 转换器: https://github.com/bang590/JSPatchConvertor
4、JSPatch 语法及其他资料: https://github.com/bang590/JSPatch/wiki/
iOS CUICatalog: Invalid asset name supplied: (null)
方法 [UIImage imageNamed:name] 在 name 为 nil 的情况下出现上述提示,
在 name 为 空串 的情况下提示 “iOS CUICatalog: Invalid asset name supplied:”。
解决方案:新建一个 UIImage 的类目,添加方法 +imageNamed2:1
2
3
4
5
6
7+ (UIImage *)imageNamed2:(NSString *)name {
if (name.length == 0) {
return nil;
}else{
return [self imageNamed:name];
}
}
然后将代码中的 +imageNamed: 方法替换为 +imageNamed2: ,以后都用 +imageNamed2: 方法。
Ubuntu14.04搭建VPN服务
Ubuntu14.04搭建VPN服务
第一步需要安装PPTP,以用来提供VPN服务
1.1 #apt-get install pptpd
1.2 如果有问题的话比如提示找不到之类的,apt-get update 一下应该就可以了,然后再来一次就会自动完成安装。装好了之后我们需要进行配置一下以让它可以使用
2.1 #nano /etc/pptpd.conf
2.1 取消掉以下 2 行的注释:2.1.1. localip 192.168.0.1 (192.168.0.1 改成VPS的外网独立IP) 2.1.2. remoteip 192.168.0.234-238,192.168.0.245 (“192.168.0.234-238,192.168.0.245”改成分配给用户的IP段,例如:10.10.10.100-200)然后我们需要分配账号给自己使用
3.1 #nano /etc/ppp/chap-secrets
3.2 添加账户,例如:test pptpd “123” *格式:用户名(tab键)协议(tab键)“密码”(tab键)* PS:密码用引号引起,最后的*号表示允许在任意IP连接到服务配置 DNS
4.1 #nano /etc/ppp/pptpd-options
4.2 找到 ms-dns,取消掉注释
4.3 修改为当地DNS或谷歌DNS,例如:8.8.8.8,8.8.4.4开启内核IP转发
5.1 #nano /etc/sysctl.conf
5.2 取消掉 net.ipv4.ip_forward=1 这一行的注释.
5.3 #sysctl -p 使之生效安装iptables,开启NAT转发
6.1 #apt-get install iptables(如果没有安装iptables)
6.2 #iptables -t nat -I POSTROUTING -j MASQUERADE (开启nat转发)重启服务,让配置生效
7.1 #service pptpd restart
【总结】虽然可以自己搭建服务器,但是需要注意 ip 被封后的处理。综合下来还是不如直接买大品牌 VPN 合算和好用。
Missing iOS Distribution signing identity for …
过年回来,发现 Xcode 证书都失效了,提示 Missing iOS Distribution signing identity for …
解决方案:
1、下载 AppleWWDRCA.cer,双击导入钥匙串;
2、打开钥匙串,选择 [ 菜单 - 显示 - 显示已过期的证书 ];
3、删除 [ 登录 - 证书 ] 下的过期的 Apple Worldwide Developer Relations Certification Authority,别忘了 [ 系统 - 证书 ] 下的也有一个;
4、收工。