git 回顾
初始化
git init
添加文件
git add *
提交
git commit -m desc
查看记录
git log
版本回退
git reset --hard HEAD^^
^表示上一个版本,^^表示上上个, ~表示第几个,34356表示id号 * --hard id
版本恢复查看
git reflog
查看已删除 commit id添加远程仓库
git remote add origin git@xx.git
修改远程仓库地址
git remote set-url origin git@xx.git
push仓库
git push -u origin master
tag标签
git tag -m '**'
同步git push origin 0.02
删除git push origin :版本号
初级工程师
精通oc语言基础
精通UIKit
熟悉网络通信机制以及常用数据传输协议
具备主流开源框架的使用经验(AFNetWorking)中级工程师技术要求
扎实的编程,数据结构,算法基础
深入理解语言机制,内存管理,网路,多线程,gui
精通常用的设计模式,框架,构架
良好的分析,解决问题的能力高级工程师的技术要求
解决研发过程中的关键问题和技术难题
调优设备流量,性能,电量等
较强的软件设计能力
对iOS内部原理有深刻的理解
tableview 要点
- cell复用
- 数据源同步(多线程并发 修改读写数据源)(解决:串行|copy)
UI事件传递响应
- uiview,calayer
uiview -> layer(calayer,(contents->backing store)) -> backgoundcolor(层级关系)
总结: UIView 是提供显示内容,以及处理触等事件以及参与响应链,CAlayer负责显示视图内容等contents
- 事件传递、响应链
主要有两个方法参与: hitTest(point:CGPoint,event:UIEvent) -> UIView; point(inside:CGPoint,event:UIEvent)->Bool;
点击屏幕 -> UIApplication -> UIWindow -> hitTest-> pointInsinde(倒序遍历子视图 hitTest) -> view
-
UIView 绘制流程
- UIView.setNeedslayout 实际调用 CALayer.setNeedsDisplay。首先在runloop中注册一个Observer监听 线程BeforeWaiting和Exit的事件。执行注册的callback(执行view的drawrect),通过coreAnimation发送到Gpu(view的拼接,纹理的渲染)
- 一般的流程
view.addSubview -> CALayer.drawInContent -> CAlayerDelagate.draw(layer,inContext)
-
离屏渲染
- On-Screen Rendering
- 意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。
- Off-Screen Rendering
- 意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作(光栅化,遮罩,阴影,抗锯齿,圆角)。
- On-Screen Rendering
OC基础
分类
- 主要使用体现
- 声明私有方法
- 分解庞大的类文件
- 把Framework的私有方法公开
- 特点
- 运行时决定
- 能够为系统类添加分类
- 能够添加实例方法、类方法、协议、属性(并非实例变量,get set 方法)
Runtime
数据结构
-
主要结构
class = objc_class -> 继承objc_object
objc_object (isa指针 )
objc_class(Class superClass, cache_t cache, class_data_bits_t bits)
isa_t 是共用体结构(指针型isa,非指针型isa)
// objc_object数据结构
struct objc_object {
private:
isa_t isa;
};
// isa共用体结构
union isa_t {
isa_t() { }
isa_t(uintptr_t value) : bits(value) { }
Class cls;
uintptr_t bits;
struct {
uintptr_t nonpointer : 1;
uintptr_t has_assoc : 1;
uintptr_t has_cxx_dtor : 1;
uintptr_t shiftcls : 33; // MACH_VM_MAX_ADDRESS
uintptr_t magic : 6;
uintptr_t weakly_referenced : 1;
uintptr_t deallocating : 1;
uintptr_t has_sidetable_rc : 1;
uintptr_t extra_rc : 19;
};
}
// objcet_class 结构
struct objc_class : objc_object {
// Class ISA;
Class superclass;
cache_t cache; // formerly cache pointer and vtable hash查找
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
class_rw_t *data() {
return bits.data();
}
void setData(class_rw_t *newData) {
bits.setData(newData);
}
};
// 存放 实例方法,属性名
struct class_rw_t {
uint32_t flags;
uint32_t version;
const class_ro_t *ro; // 成员信息
method_array_t methods; //方法列表
property_array_t properties; //属性列表
protocol_array_t protocols; //协议列表
Class firstSubclass;
Class nextSiblingClass;
}
// 存放 成员变量信息
struct class_ro_t {
uint32_t flags;
uint32_t instanceStart;
uint32_t instanceSize;
const uint8_t * ivarLayout;
const char * name; // 类名
method_list_t * baseMethodList;
protocol_list_t * baseProtocols;
const ivar_list_t * ivars; //定义类的成员变量
const uint8_t * weakIvarLayout;
property_list_t *baseProperties; //属性列表
method_list_t *baseMethods() const {
return baseMethodList;
}
};