commit和branch理解深入

深入理解gitcommitbranch,有助于在日常开发中,更好的运用git

commit的本质

初始化目录

为便于讲解,先创建一个如下目录结构的BeiLiao(贝聊是我所在的公司)目录:

在命令行中输出文件的目录结构如下:

~ qingmo$: tree
.
└── BeiLiao
    ├── Component
    │   └── App.js
    ├── index.html
    └── index.js

如果以竖向文件层级树的样式看是这样的(深色表示文件目录,浅色表示文件),

《结构型设计模式》之iOS系统框架实践

结构型设计模式是从程序的结构上解决模块之间的耦合问题,主要包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式等7种经典设计模式,在iOS系统框架中组合模式、装饰器模式和享元模式是有经典实现的,而适配器模式、桥接模式、外观模式和代理模式iOS系统框架中的实现并不明显,但在第三方框架或者贝聊(我所在的公司)的App是有用到的,为便于讲解,本文会挑选最恰当的例子。

本文是设计模式之iOS系统框架实践系列中的第二篇(总共三篇),如果您对《创建型设计模式》感兴趣,建议看看我的前一篇文章《创建型设计模式》之iOS系统框架实践

适配器模式(Adapter)

适配器模式是将一种接口,转换成另外一种接口,一般被适配的类的功能与外界所希望的一致,只是接口与外界所希望的不同,所以需要适配接口。一般需要新旧接口的转换时用到。

《创建型设计模式》之iOS系统框架实践

为了API的易用性、易维护性和健壮性,苹果工程师在iOS系统框架中其实运用了不少经典设计模式,而这些实践也正是因为良好的封装性,开发中我们虽日日相对,却也难以察觉它的存在。相对于其他生搬硬造隔靴搔痒的例子,这些我们熟悉的不能再熟悉的API方是学习设计模式的最佳案例。因此本系列拟以iOS系统框架中相关设计模式的实践为起点,探讨研究23种经典设计模式。

本文先讲述《创建型设计模式》(Creational Patterns)。

创建型设计模式是在创建一个类时用到的设计模式,总共有5种,其中工厂方法模式还可以根据实现的不同,分出简单工厂模式和工厂方法模式。

简单工厂模式(Factory Method)

iOS系统Foundation框架中的NSNumber所应用的就是简单工厂模式。

iOS触摸事件的流动

当指肚轻触屏幕,整个系统像沉睡的生灵突然被惊醒,然后经历过腥风血雨的一段奇幻旅行,最终又归于沉寂。

整个iOS触摸事件从产生到寂灭大致如下图:


如何在iOS开发中更好的做假数据?

当工期比较紧的时候,项目开发中会经常出现移动端等待后端接口数据的情形,不但耽误项目进度,更让人有种无奈的绝望。所以在开发中,我们常常自己做些假数据,以方便开发和UI调试。然而做假数据方法不同,效率和安全性都各不同,有时稍有不慎,还会产生很大的bug。因此本文拟结合我在贝聊的开发经验,讲一讲我们组在iOS开发中曾经用过的做假数据的方法及其优劣。

示例项目

为方便下文的说明,本文主要以贝聊家长版app发现首页的热门帖子列表的实现为例。热门帖子列表的样式如下图:

这是比较常见的列表,用常用的UITableView实现即可,但需要自定义一个的UITableViewCell的子类ExploreTableViewCell。项目中,ExploreTableViewCell并没有用xib实现(因为xib日后不好修改,且代码复用性差),而是通过SnapKit用纯代码布的局,具体的布局代码大致如下:

这一年与下一年-2016年度总结正式版

这一年

每当总结过去一年的时候,总感觉时间匆匆,一转眼又是一夏,一转眼又过一秋,时间流逝不止,我们只能以成长搪塞逐渐衰老的年华。

我是6月20日来到贝聊的,处于程序员小白水平的我,当时只能勤奋的追赶,努力的做些小项目练手,同时也疯狂的补齐残缺的编程知识。半年以后到今天,积累起来,完成的项目大大小小,林林总总,也有一二。如网络日志feature、班级列表刷新、老师端班级语音播报、家长端老师端发现改版及再改版、老师端和家长端好习惯首页和详情页、弹窗基础框架、优惠券详情页和帖子详情红包页、一系列小的工具拓展、大图浏览、客服、专属客服、客服评价等等。我是一个不喜欢拖累大家的人,不愿意大家因为我的原因出现拖延,因此这些项目大部分如时的交付,而且作为初学者,写代码时如履薄冰战战兢兢的,千般思虑,万般测试,因此上线后的bug并不多见,整体还算优良。

其实回想起这段日子,我能分明的感受到自己对编程的认识是一个层次一个层次的成长,每做一个大的feature项目,基本就会遇到一个大的问题,然后就向前进一步。

青葱年华-2016年度总结随写版

仔细端详着年初许下的誓言,孤零零的转行二字高悬,简单的有点简陋,隐藏了背后所有的心酸。

2015年下半年,我紧闭着双眼,静静凝视着自己的灵魂,发现多年浸润土木,灵魂却渐渐干瘪了,随处可见的疮痍,应该是多少次默默承受苦痛,留下的伤疤,慢慢溃烂。不转行不行了,多次探索寻觅,最终走上了编程这条又臭又烂的不归路。数不清多少个通宵达旦的刻苦修炼,也不知道多少个无休无止的知识学习,2015年初,终于许下来年开始找工作的誓言和宏远。

如何让pod update快到飞起?

想成为一个好的程序员,翻墙是必备技能,查个资料、搜个问题啥的,百度实在是渣(不是黑百度),可以说编程,不翻墙没法活。

至于如何翻墙,方法很多,有自己买VPN的,有公司自己配的,也有走代理的。个人最喜欢shadowsocks,可惜现在已经找不到正规的下载地址了,但只要用心找找,总还是有好人分享的。如果您用的是mac,实在下载不到,可以在评论中把邮箱留下,我发给你。

有了翻墙软件,固然神清气爽,但pod update等终端命令发起的网络请求却不能走代理,几乎停滞的下载速度让人窒息,有时候项目稍微大一点,一个pod update命令能跑一上午,这还编什么程序,如果pod update能快到飞起,那是怎样令人神往的感觉?

办法总是有的,这就是这个时代最迷人的地方。

前提

再说一遍前提,必须得先能翻墙,并且翻墙后的网速得比较快。

再见土木,hello world!


从07年至今,算下来,我学土木也近十年。十年的浸润,不敢说造诣很深,但至少基础坚实,如果继续努力,相信结果不坏。如今突然离开,跨越至IT,十年的成长轮为羁绊,又回到起点的感觉,惶惶不安。

其实我并不是一个爱冒险的人,而且结构工程师、设计院,也是不少人梦寐以求的,在社会上颇受尊重,但自己身在其中,总有太多的烦躁相伴,痛苦相随。痛苦是很有价值的感受,因为无论你怎么偏离你命中注定的航线,它都会一点一点地将你校正到正确的方向,即使你不勇敢,它也会让你变得义无反顾。

闭包捕捉(closure capture)浅析

根据Swift官方文档,闭包(closure)会自动捕捉其所在上下文中的外部变量,即使是定义这些变量的上下文已经消失。寥寥数字,其实已经将闭包捕捉说的足够清晰明了,只是其中隐含的诸如捕捉的具体含义、捕捉的时机、被捕捉变量的特性和捕捉列表的意义等细节,如不详加研究,使用闭包还是会错误百出,难以挥洒自如。

本文中所有代码均在playground中运行,若欲在实际项目中测试,需做部分修改,但基本逻辑和结论不变

——————— 本文部分结论和例子根据部分读者意见做了修正更新,感谢他们 ———————

捕捉的含义

闭包捕捉等同于copy

闭包捕捉某个变量就意味着copy一份这个变量,值类型的变量直接复制值,引用类型的变量复制引用。复制后的变量名同被捕捉的变量,复制后的变量仍为变量,常量仍为常量。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×