Design Pattern(2) Prototype
原型模型结构图
何为原型模式?
意图
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
到底什么是原型模式?
在 Cocoa 框架中的 NSString、NSArray、NSDictionary 都有用到原型模式。我们在写属性的时候,就已经用到了:
1 | @property (copy, nonatomic) NSString *name; |
所谓的原型模式,就是说在某一些情况下,我们可以通过对象的 copy 的方式来创建对象,而不是通过该类的初始化方法的方式,在 iOS 中 Objective-C 是通过 alloc 和 init 两步来创建对象的。对于字符串除了 allo、init 创建对象的方式之外,我们可以通过 NSString copyName = [self.name copy] 的方式来创建新的字符串对象,这就说明了 NSString 类支持原型模式。所以现在应该进一步清楚什么是原型模式了吧,就是通过 copy 的方式实现对象的创建。
原型模式实践
就是让你的类实现 NSCopying 协议,可以调用 copy 方法创建新的对象
- 类声明 NSCopying 协议;
- 实现 NSCopying 中的 copyWithZone: 方法,在这个方法中返回一个新的对象
深复制和浅复制
何时使用原型模式
总结:
哈哈,其实一直在使用原型模式,只是没有注意到罢了
CS50-简介
[TOC]
CS 50 简介
Lecture | Main |
---|---|
Week 0 | Scratch |
Week 1 | C |
C,continued | |
Week 2 | Algorithms |
Week 3 | Memory |
Week 4 | Data Structures |
Week 5 | HTTP |
Week 6 | Dynamic Programming |
Python | |
Week 7 | Python, continued |
Week 8 | Scratch |
Week 9 | SQL |
Week 10 | JavaScript |
Week 11 | The End |
参考-cs50.net
project5050
cs50.io, cs50 线上 IDE
学习途径
- 直接在 YouTube 上观看
- 优点: 可以同步中文字幕
- 缺点:只有视频而已
- edx 上观看
- 优点:有课程大纲以及英文字幕(字幕不是一句一句的,是整个的)
- 缺点:没有中文字幕
- cs50.tv, 这里有源码、ppt、视频等资源供下载
OK,主要就是上面的三个资源了。
CS50 Library
在学习到第二节课——C语言的时候,需要用到 cs50.h 这个库。最简单的方式质直接登入cs50.io,线上的 IDE,但是这需要又网络,而且程序必须保存到线上的 IDE 环境中,无法再本地进行编译,那么如何使得在本机上开发也可以引入 cs50.h 呢?
- 找到 cs50/libcs50 git 仓库
- 下载 -> 解压 -> cd libcs50 -> sudo make intall(详细安装可以看 git 的 readme 文件)
- 安装完成只有,在开发的 c 文件中引入 #include
就 OK 了 - 可以通过 man get_string 本地查看文档,也可以通过 reference.cs50.net/cs50 在线查看文档,推荐线上查看比较清晰
test.c 内容:
1 | #include <cs50.h> |
运行:
1 | $clang test.c -lcs50 |
注意:
- 头文件引入,按照字母顺序,方便查找
- clang 编译的时候需要加上 -lcs50
学习资源
- edx 学院, 视频,字幕
- [cs50.tv] (http://cs50.tv/2017/fall/) 主要是资源的下载,代码下载
- 中文解读
- short
- YouTube
- manual.cs50.net
- reference.cs50.net/cs50
- github.com/cs50/libcs50
iOS 自动布局
iOS 开发自动布局:
iOS 开发主流布局开源库,Swift 主要是 SnapKit,OC 是 Masonry。
Auto Layout 通过确定界面各个元素之间相互的关系来进行布局。每条关系就是一条约束。一个元素被确定,他的约束表示为一个一次函数。
VFL
Visual Format Language ,是一种通过字符串创建约束的方式。
学习VFL的优点:
- Xcode 控制台输出的约束信息就是VFL语法,如果对这种语法很熟悉,对调试约束有很大帮助;
- 一次可以表示几个item在一个方向上的约束关系,可以同时创建几个约束;
- 在这种语法限制下只能创建出有效的约束。
缺点:
- VFL 语法适合表述平面关系的约束,对于一些约束比如比例约束就爱莫能助了;
- 字符串方式,编译器不能检查,只能在运行时调试约束。
Auto layout 发展:
iOS 7 和 IOS 8 设置约束上没有太大的变化, iOS 9 苹果推出了 Layout Anchors 新的API来创建约束。
Http2.0 快速浏览
目前大部分的应用都使用的是 Http 1.1
iOS 9 开始支持 HTTP2.0,也就是 NSURLSession 这个框架会支持HTTP2.0。
在 iOS 9 之前的系统可以考虑 SPDY 方案,twitter 已经有了方案 —— CocosSPDY。
因为苹果针对 HTTP 2.0 做出的API对开发者是透明的,所以移动端在做HTTP2.0支持的时候几乎不需要工作量。服务端可以需要一些部署,但是相对来说也容易很多。
在使用 SPDY 方案的时候,由于苹果的TLS不支持NPN,所以通过NPN写上使用SPDY就无法通过默认端口443来实现。有两种做法:
一、客户端和server同事约定好使用另一个端口来做NPN协商,这种方法简单一点,但是需要从框架层将所有的HTTP请求都Map到另一个Port,可以参考iOS 网络请求优化之DNS映射
二、server 这边通过request header 智能判断客户端是否支持SPDY而越过NPN协商过程,twitter 自己的网站 Twitter 使用第二种方式
开拓者SPDY
傻逼了,以前就知道写 …
今天看了SPDY,真的是 …
每次谈到客户端与服务端进行通信的时候,就是老生常淡,只能客户端发起请求,服务端负责响应。但是,但是 … 但是真的有很多场景需要相互推送消息的,每次都是WebSocket什么鬼的,熟不知市场上已经有好多方案了。
iOS protobuf 使用
这是在读 《iOS 成长之路 2017 春》 的第二章节HTTP的时候,实现移动端长连接方案地址用 TCP 的长连接的时候看到的一种方案 – google 的 protobuf。
— 参考 —-
Objective C Generated Code