Hi, this is Alice Home


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益404

Design Pattern (4) Abstract Factory

发表于 2018-04-29 | 分类于 Design Pattern

Design Pattern(3) Factory Method

发表于 2018-04-28 | 分类于 Design Pattern

Design Pattern(2) Prototype

发表于 2018-04-21 | 分类于 Design Pattern

原型模型结构图

何为原型模式?

意图

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

到底什么是原型模式?

在 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 方法创建新的对象

  1. 类声明 NSCopying 协议;
  2. 实现 NSCopying 中的 copyWithZone: 方法,在这个方法中返回一个新的对象

深复制和浅复制

何时使用原型模式

总结:

哈哈,其实一直在使用原型模式,只是没有注意到罢了

CS50-简介

发表于 2018-04-01 | 分类于 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
2
3
4
5
6
7
8
#include <cs50.h>
#include<stdio.h>

int main()
{
int number = get_int("input: ");
printf("hello %d",number);
}

运行:

1
2
3
4
$clang test.c -lcs50
$./a.out
$input: 12
$hello 12

注意:

  • 头文件引入,按照字母顺序,方便查找
  • clang 编译的时候需要加上 -lcs50

学习资源

  1. edx 学院, 视频,字幕
  2. [cs50.tv] (http://cs50.tv/2017/fall/) 主要是资源的下载,代码下载
  3. 中文解读
  4. short
  5. YouTube
  6. manual.cs50.net
  7. reference.cs50.net/cs50
  8. github.com/cs50/libcs50

MapReduce Simplified Data Processing on Large Clusters 阅读记录

发表于 2018-03-27

参考:

MapleReduce: Simplified Data Processing on Large Clusters
MapleReduce 中文版
李开复:算法的力量
MapReduce Tutorial
https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/36249.pdf

iOS 自动布局

发表于 2018-03-26 | 分类于 iOS

iOS 开发自动布局:
iOS 开发主流布局开源库,Swift 主要是 SnapKit,OC 是 Masonry。

Auto Layout 通过确定界面各个元素之间相互的关系来进行布局。每条关系就是一条约束。一个元素被确定,他的约束表示为一个一次函数。

VFL

Visual Format Language ,是一种通过字符串创建约束的方式。

学习VFL的优点:

  1. Xcode 控制台输出的约束信息就是VFL语法,如果对这种语法很熟悉,对调试约束有很大帮助;
  2. 一次可以表示几个item在一个方向上的约束关系,可以同时创建几个约束;
  3. 在这种语法限制下只能创建出有效的约束。

缺点:

  1. VFL 语法适合表述平面关系的约束,对于一些约束比如比例约束就爱莫能助了;
  2. 字符串方式,编译器不能检查,只能在运行时调试约束。

Auto layout 发展:

iOS 7 和 IOS 8 设置约束上没有太大的变化, iOS 9 苹果推出了 Layout Anchors 新的API来创建约束。

Http2.0 快速浏览

发表于 2018-03-26 | 分类于 iOS

目前大部分的应用都使用的是 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 使用第二种方式

http2.0 调试工具 curl tcpdump wireshark

发表于 2018-03-26

开拓者SPDY

发表于 2018-03-26

傻逼了,以前就知道写 …
今天看了SPDY,真的是 …
每次谈到客户端与服务端进行通信的时候,就是老生常淡,只能客户端发起请求,服务端负责响应。但是,但是 … 但是真的有很多场景需要相互推送消息的,每次都是WebSocket什么鬼的,熟不知市场上已经有好多方案了。

iOS protobuf 使用

发表于 2018-03-26 | 分类于 iOS

这是在读 《iOS 成长之路 2017 春》 的第二章节HTTP的时候,实现移动端长连接方案地址用 TCP 的长连接的时候看到的一种方案 – google 的 protobuf。

— 参考 —-
Objective C Generated Code

1…789…13
Alice

Alice

The Loneliest Whale in the World

121 日志
35 分类
30 标签
© 2021 Alice
由 Hexo 强力驱动
主题 - NexT.Pisces