SVN基本工作流程
svn版本控制是集中式的数据管理,存在一个中央版本库,所有开发人员本地开发使用的代码都是来自这个版本库,在中央版本库中建立多个项目。
svn工作流程:
- 在中央版本库中创建一个项目,项目中包含主干和分支,分支是从主干复制的;
- 开发人员从中央版本库check out 下这个分支的代码;
- 增加自己的代码、修改或删除现存的代码;
- commit 代码,如果修改期间其他人提交了代码,就会提示过期无法提交,就需要先up,之后再提交;如果up代码时出现冲突,就需要解决冲突之后在提交(开发人员协商解决冲突);
- 测试环境测试,解决问题之后合并到主干中,在之后更新生产环境代码。
缺点:
- 严重依赖网络环境,连接不到中央版本库时无法工作;
- 需要备份——需要备份数据和修改的历史记录。
static和const
static 的两大作用
控制存储方式
static
被引入以告知编译器,将变量存储在程式的静态存储区而非栈上空间。引出原因:函数内部定义的变量,在程式执行到他的定义处时,编译器为他在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,怎么实现?
最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。
解决方案:因此c++ 中引入了
static
,用他来修饰变量,他能够指示编译器将此变量在程式的静态存储区分配空间保存,这样即实现了目的,又使得此变量的存取范围不变。
升级CocoaPods操作流程
- 查看当前镜像源:gem source -l
- 若镜像地址无效,删除gem源:gem sources –remove https://ruby.taobao.org/
- 添加有效的镜像地址:gem source —a https://gems.ruby-china.com/
- 查看gem源是否是最新的:gem sources -l
- 更新gem:sudo gem update –system
- 升级cocoapods:sudo gem install -n /usr/local/bin cocoapods —pre 或 sudo gem install cocoapods
- 查看升级后的cocoapods版本:pod –version
iOS之图片压缩
在iOS应用中,用户上传的图片通常需要进行压缩后才能进行上传。
图片的压缩其实是两个不同的概念:
- 是 “压” 文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降。
- 是 “缩” 文件的尺寸变小,也就是像素数减少。长宽尺寸变小,文件体积同样会减小。
iOS中如何访问并修改一个类的私有属性
要访问一个类的私有属性,很容易想到使用KVC,其实还有种方法就是利用runtime。但runtime有个短板在于,在ARC下,不支持对基本数据类型的变量进行修改。
Swift之as、as?和as!
iOS之KVC
KVC,即是指 Key Value Coding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性。KVC是实现KVO的基础。
一个对象拥有某些属性。比如一个Person
对象有一个name
和一个address
属性。则Person
对象分别有一个value对应他的name
和address
的key。 key只是一个字符串,它对应的值可以是任意类型的对象。从最基础的层次上看,KVC 有两个方法:一个是设置key的值,另一个是获取key的值。如下面的例子:
1 | -(void)changePerson:(Person *)p name:(NSString *)newName |
iOS之KVO实现原理
当观察某对象A时,KVO机制动态创建一个对象A当前类的子类,并为这个新的子类重写被观察属性keyPath的setter
方法。setter
方法负责通知观察对象该属性的改变状况。
Apple 使用了isa混写(isa-swizzling)来实现 KVO 。当观察对象A时,KVO机制动态创建一个新的名为: NSKVONotifying_A
的新类,该类继承自对象A的本类,且KVO为NSKVONotifying_A
重写被观察属性的setter方法,setter方法会负责在调用原setter
方法之前和之后,通知所有观察对象该属性值的更改情况。
NSKVONotifying_A类
在KVO过程中,被观察对象的
isa
指针从指向原来的A类,被KVO机制修改为指向系统新创建的子类——NSKVONotifying_A
类,来实现当前类属性值改变的监听;