iOS架构师之路:制定代码规范艺术

俗话说“欲善其功
必先利其器”,越发是就是运营工作人员对此一定都深有感触。运营工作涉及面较广,事情多而杂,所以把现有的营业相关工具充裕利用起来,往往可以一语双关,且起到赞助功效。本文跟大家大饱眼福下自己个人平日营业工作中常用到的工具应用,我们能够互补分享哦。废话不多说,上干货~

前言

先吹个牛,我打心眼自认为自己是爱好对公司项目标代码质地负责的人,对于思考什么写出高质地可读性的代码我是乐此不彼。以前我写过两篇关于代码命名规范和代码编写规范的篇章,《iOS架构师之路:iOS开发(OC)中的命名规范》《iOS架构师之路:IOS项目中的编码规范》,您若是心思很好,就去探望吧,假使低于很好,那不提议您看,怕你心里骂娘,因为现在看,感觉温馨写的不太认真,有广大上面可以写的更周到,恩,我控制给自己帖贴金,无法那样说自己:其实那半年小哥我在代码规范地点的学问又见涨不少,所以看从前定制的科班不爽,作为架构师保持谦虚,通过不停学习,不断自我考订,对代码有少数洁癖是该有的气度(潜台词其实我想说自己有)。制定项目的代码规范对架构师的要害,似乎要你生个娃一如既往,权利重(英文名:)大,万平生出来缺胳膊少腿,娶不到女儿,你以后就是伺候她生平,给他当牛做马,他也不自然会念你的好。

一、内容排版工具

1.i 排版

微信公众号图文音讯排版工具,匡助各样富文本样式格式

2.秀米

秀米是一款基于微信公众平台的图文编辑和排版工具,它比微信自带的编辑器多了许多排版作用和美化工具。在秀米准将内容编排排版之后,直接复制粘贴到群众号后台即可。

3.壹伴公众号小插件

对群众号后台举行加强,完毕一键传图、公众号内排版、本地传图等。

论代码规范的重中之重

  • 1.架构师要为整个项目技术方向的向上负责,所以制定一个绝妙的代码规范,让开发工程师遵循,有利于项目朝着您预感的主旋律前行。比如当您向利用AOP技术完成日志效能时,就须要确定部分措施命名。
  • 2.一如既往的代码规范,有利于代码reveiw工作。如若每个工程师写的代码风格不同,review代码的同事,阅读起来肯定不如愿。
  • 3.渴求工程师按照代码规范写出同样的代码,就不怕她跳槽。那行本来就浮躁,流动性大,如若工程师写的代码风格唯有她协调能看懂,那东西他跳槽,新人是很难继续保证那部分代码的,惜指失掌。

二、美工设计、图片资源、处理、管理工具

1.昵图网

昵图网是一家显赫的图片素材共享平台,网站上的持有材料图片均由网友上传共享的,你上传共享的图形越来越多,你能下载的图样也就更多。当然也有免费和付费的。

2.千库网

千库网是境内首家专注提供免抠PNG图片的材料网站。免费下载有限制,越来越多下载须求付费哦~

地点两家虽说有付费服务,但价格上还算能接受。下边分享八个免费、无版权的图形资源下载站。

3.pixabay

Pixabay约有910000张免费的照片、矢量文件和办法插图。图片覆盖面广,文件也有过多尺码可以选用。图片质料高,小编首推的图片素材网站。里面的图纸可以复制、修改、转载等方法使用,甚至作为商业用途,无需申请获准,也无需支付版税。

4.SplitShire

SplitShire网站的图形质料也很高,大都相比feel风。

5.photoshop

本条就不需求自身过多介绍了,众所周知的图形处理软件。

6.AI

或许部分小伙伴并不常用AI,多用PS。那么些看现实须求吗,平日矢量图处理用AI,像素图处理用PS。平常做活动海报、宣传图等一般二者匹配使用。

7.Ulead GIF
Animator

UGA是用来成立、处理gif动态图的,有时必要在软文中插入个搞笑有趣的gif动态图我就用它。

8.Eagle

Eagle是一个标准的图纸管理软件,更优雅的重整图片素材与陈设灵感,试用+付费的,可是价格还算可以。那个专门吻合设前端设计师等常和图片打交道的童鞋,作为运营谈不上必不可少,感兴趣的可以试行。

培育代码洁癖

给大家推荐一本关于代码规范的大笔,第一本:《禅与 Objective-C
编程艺术(Zen and the Art of the Objective-C Craftsmanship
普通话翻译)》
(简称:Zen),那本书开源社区的大牛,无偿进献出来的,该书给大家介绍许多写代码的不错姿势,并解释为什么使用那几个姿势体验更好。看完那本书应当知道什么写出优雅、高可读性并且可看重的代码了。

三、思维导图工具

1.freemind

首推freemind是因为它是完全免费的。纵然界面效果上也许不如后边要引进的花哨美观,但成效上着力能知足大家的常用需要了。

2.Xmind

XMind以其优秀的易用性,友好的界面和强大的功力吸引了广大用户。

3.百度脑图

百度脑图也是一款便捷的脑图编辑工具,操作不难。襄助在线平昔开立、保存并分享你的思路。免安装云存储易分享经验舒适成效丰盛.。

本身推荐的代码规范

《The Objective-C Style Guide used by The New York
Times》
(简称:New
York,该专业也有中文版),《New
York》是本身相比欣赏的编码规范风格,它是《Zen》的编码思想一个很好的履行。

四、原型设计工具

Axure

Axure是一个正经的便捷原型设计工具,让承担定义须求和标准化、设计作用和界面的我们能够高效创制应用软件或Web网站的线框图、流程图、原型和标准表明文档。然而Axure平日产品首席营业官用的可比多,作为运营,我常常是在做产品分析优化方案如故做图时会用到它。

关于《Zen》、《New York》代码规范的填补

五、待办、义务管理工具

然之一起

实际上那本来是一款公司办公协办软件,我个人用它来做时间、待办、义务管理。因为运营工作事多且杂,不记待办可能回头就忘了。你还在用便利贴?!太OUT了~

高效Todo

那个软件的界面设计都是应用直观的四象限设计,那样的规划可以让用户一目精通的掌握什么工作是按捺不住需求处理的。

1.iOS切图文件的命名规范

这一部分正经或者是很有经历的规划提供,也有可能是大家开发人员提供,通晓总是没有害处的。

俺们的命名规则的主旨绪维是把公文名分成三片段,第一部分是图片的逻辑归属分类,第二有些是图表的显现内容,第三有的是图形的内容的类型,有些图片还会有第四局地,表示图片表现的情况。首先有几个规则是:

  • 用英文命名,不用拼音
  • 每一局地用下划线分隔
  • 图形名中两倍图在名字末了要加@2x,三倍图在名字最后要加@3x

万能公式

image_naming_guideline.png

六、数据解析工具

1.百度总结

以此是国内站点必然要用的站点统计工具,跟踪站点相关数据。

2.Google
Analytics

谷歌(Google)分析工具(GA),越发是面向海外SEO的站点,那几个也是必用工具哦。

3.office三剑客——word、excel、PowerPoint

或是有些小伙伴觉得那仨上穿梭桌面,那不是最基本的么。而实际恰恰就是那一个近似接触时间最长最不起眼的软件,很多营业人员都驾驶不了,仅停留在外部。尤其是Excel,基本的数量透视表制作、每月每年的报表制作都会用到。

2.类的布局

程序布局的目标是体现出程序可以的逻辑结构,提升程序的准确性、接二连三性、可读性、可维护性。更紧要的是,统一的次第布局和编程风格,有助于提升全部项目的开发质量,提高开发效能,下落开发花费。同时,对于常见程序员来说,养成非凡的编程习惯有助于增强协调的编程水平,提升编程功能。由此,统一的、非凡的程序布局和编程风格不仅仅是个人主观美学上的可能格局上的题材,而且会涉嫌到产质地料,涉及到村办编程能力的进步,必须引起大家尊重。

小结

正文和大家一齐享用运营工作中常用的工具软件,假使大家还有别的的好工具,欢迎一起享受沟通。

2.1.文件布局

【规则2-1-1】听从统一的布局顺序来书写头文件。

说明:以下内容假使某些节不要求,可以忽略。但是其余节要保持该次序。**
**
头文件布局:

文件头
#import (依次为标准库头文件、非标准库头文件)
全局宏
常量定义
全局数据类型
类定义

正例:

/***************************************************************************
 *                                文件引用
 ***************************************************************************/ 
/***************************************************************************
 *                                 类引用
 ***************************************************************************/

/***************************************************************************
 *                                 宏定义
 ***************************************************************************/
/***************************************************************************
 *                                 常量
 ***************************************************************************/ 
/***************************************************************************
 *                                类型定义
 ***************************************************************************/ 
/ ***************************************************************************
 *                                 类定义
 ***************************************************************************/

【规则2-1-2】坚守统一的布局顺序来书写落成公文。
说明:以下内容假使某些节不要求,可以忽略。不过任何节要保持该次序。
落到实处公文布局:

文件头(参见“注释”一节)
#import (依次为标准库头文件、非标准库头文件)
文件内部使用的宏
常量定义
文件内部使用的数据类型
全局变量
本地变量(即静态全局变量)
类的实现

正例:

/***************************************************************************
 *                                文件引用
 ***************************************************************************/ 
/***************************************************************************
 *                                 宏定义
 ***************************************************************************/
/***************************************************************************
 *                                 常量
 ***************************************************************************/ 
/***************************************************************************
 *                                类型定义
 ***************************************************************************/
/***************************************************************************
 *                                全局变量
 ***************************************************************************/
/***************************************************************************
 *                                 原型
 ***************************************************************************/
/ ***************************************************************************
 *                                类特性
 ***************************************************************************/
/ ***************************************************************************
 *                                类的实现
 ***************************************************************************/
2.2类社团布局

使用#pragma mark –来分类方法

#pragma mark – Life Cycle

#pragma mark - Events

#pragma mark – Private Methods

#pragma mark - UITextFieldDelegate

#pragma mark - UITableViewDataSource

#pragma mark - UITableViewDelegate

#pragma mark - Custom Delegates

#pragma mark – Getters and Setters
2.3布局中的空格

每个方法依旧效用块之间为了协会清晰,应当有且唯有一行空格。

@interface SomeClass:NSObject

@property (noatomic, strong) UIView *aView

- (void)someMethod;

@end

@implementation SomeClass

- (void)setAView:(NSInteger )aview {

}

- (void)someMethod {

}
@end
2.4有关布局中的Private Methods块,正常状态下ViewController里面不该写

不是delegate方法的,不是event response方法的,不是life
cycle方法的,就是private
method了。对的,正常状态下ViewController里面一般是不会设有private
methods的,那么些private
methods一般是用于日期换算、图片裁剪啥的那种小效率。那种小作用仍旧把它写成一个category,要么把她做成一个模块,哪怕这一个模块唯有一个函数也行。
ViewController基本上是一大半事务的载体,本身代码已经万分复杂,所以跟工作关系不大的东西能不放在ViewController里面就不用放。其余一些,那个private
method的效益那时候只是你用赢得,可是未来或许其他地点也会用到,一开首就独自出来,有利于未来的代码复用。

3.属性初阶化放哪最好?指出在Getter中早先化

本人见到许多APP,甚至自己小卖部的门类,很多支出工程师,早先化属性的岗位相比随便,有独立添加一个起始化方法类似setupView的,有在init起初化的,各个场馆都有,我其实挺崩溃的,首先开始化格局不平等,其次也这样做尤其有可能损坏了每个方法效果的单一性(每个方法只做一件事)。我相比较习惯一个目的的”私有”属性写在extension里面,然后那一个属性的伊始化全体位居getter里面做,在init和dealloc之外,是不会冒出任何像样_property那样的写法的。就是那般:

@interface CustomObject()

@property (nonatomic, strong) UILabel *label;

@end

@implementation

#pragma mark - getters and setters

- (UILabel *)label {
    if (_label == nil) {
        _label = [[UILabel alloc] init];
        _label.text = @"1234";
        _label.font = [UIFont systemFontOfSize:12];
        ... ...
    }
    return _label;
}
@end
#pragma mark - life cycle

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:self.label];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.label.frame = CGRectMake(1, 2, 3, 4);
}

唐巧说他喜爱的做法是用_property那种,然后关于_property的初阶化通过[self setupProperty]那种做法去做。从刚刚地点的代码来看,就是要在viewDidLoad里面多调用一个setup方法而已,然后我引进的格局就是并非多调一个setup方法,直接走getter。

哦,怎么说呢,其实二种做法都能做到须求。可是从另一个角度看,苹果之所以接纳让[self getProperty]self.property可以相互通用,那种做法已经很显眼地表述了苹果的接济:希望每个property都是通过getter方法来收获。

早在二〇〇三年,Allen Holub就发了篇小说《Why getter and setter methods are
evil
》,自此以后,业界就对此暴发了各类争议,尽管是从Java初步说的,不过发展到背后各样语言也涉足了进去。然后就算现在关于那些题材探究得少了,但是照旧属于尚未敲定的状态。setter的状态相比复杂,也不是自身这一节的重点,我那边依然至关紧要说getter。大家从objc的筹划来看,苹果的设计者尤其倾向于getter
is not evil。
以为getter is
evil的案由有非凡之多,或大或小,随着争执的展开,咱们渐渐就聚焦到那样的一个缘故:Getter和Setter提供了一个能让外部修改对象内部数据的点子,那是evil的,正常状态下,一个目的自己个人的变量应该是唯有协调关切。

下一场大家回来iOS领域来,objc也一如既往面临了如此的题目,甚至进一步严重:objc并从未像Java那么严刻的私家概念。但在其实工作中,大家不太会去操作头文件之中没有的变量,那是从规范上就被明令禁止的。

认为getter is not
evil的原因也可以聚焦到一个:中度的封装性。getter事实上是工厂方法,有了getter之后,业务逻辑可以更进一步专注于调用,而不用担心当前变量是否可用。大家得以想转手,假如一个ViewController有20个subview要加盟view中,那20个subview的初叶化代码是必然逃不掉的,放在啥地方相比较好?放在何地都比位居addsubview的地点好,我个人觉得最好的地点或者放在getter里面,结合单例情势之后,代码会格外利落,生产的地方和选择的地点获得了很好的区分。
故而放到iOS来说,我依旧觉得选择getter会相比好,因为evil的地点在iOS那边基本都幸免了,not
evil的地点都能享受到,仍旧不错的。

4.Getters and Setters放在最底部

本身前边写代码一贯把Getters and Setters
放在implementation的最后边,今日看大神casatwy说最好放在最前边,我以为更有道理。控制器可能会有那么些多的view属性和任何性能,即便持有的getters
and
setters放在前方,就会导致在implementation代码顶部有大气的起先化代码,那就造成重大的逻辑代码挪到前面去了,其外人阅读代码是不太方便的。

结尾

夜深人静,该睡了。欢迎收藏的
本人的博客

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图