IOS 开发文档

一:设计模式

1:本项目采用mvvm设计模式,每个模块下分为四个文件夹,分别为:Controller View ViewModel Model
Controller:控制器文件夹 在此文件夹中只存放模块相关控制器,控制器中只做UI初始化 刷新UI 响应用户事件 跳转逻辑判断等和业务无关操作,所有业务处理放到ViewModel中处理

View:自定义视图文件夹 在此文件夹中存放该模块相关的视图,比如自定义的cell,定制的view等.

Model:数据模型 如果一个view需要设置的属性比较多,建议创建一个数据模型,并通过数据模型去给view赋值

ViewModel:业务逻辑管理 这此处理模块相关的业务逻辑,比如:网络请求 各种代理 数据逻辑判断(PS:输入数据是否合法)等, 并通过block方式提供处理结果给Controller使用,这里不建议使用通知方式返回结果

二:项目框架整体结构,如下图所示

项目结构图

1:Frameworks文件夹 存放系统库的虚拟文件夹,搭建框架的时候需要手动添加一个名称为Frameworks的虚拟文件夹,这样在Build Phases 中添加的系统库会自动归入此文件夹,不会直接在外部显示以至于打乱目录结构
2:AppDlegate文件夹 这个目录下放的是AppDelegate.h(.m)文件,是整个应用的入口文件,这里需要添加一些入口相关类以保持一个简洁的AppDelegate,所以单独建立了一个文件夹
3:Class文件夹 项目业务主体,日常大部分开发代码均在这里,里面包含项目所有的业务逻辑,下图创建了三个大的分类业务,每个业务下面的小业务再次分层次实现

Class业务模块

4:Gategory文件夹 主要用来存放公共扩展类,主要存储一些对系统库的扩展
5:Libs 文件夹 主要存放要用到的第三方类库和项目中自己实现的公共类库,可分文件夹分别存储. 本项目也用到cocopods管理第三方库,如果是不需要改动源码直接使用的建议使用cocopods管理,如果需要改动源码,强烈建议直接放入Libs文件夹中管理,以免更新pods代码时把修改的代码更新掉
6:Global文件夹 存放全局的配置文件,包括pch文件,一些全局的宏定义文件等
7:Utils文件夹 项目相关辅助类,存放相关的数据请求,支付相关类,数据库操作相关类等
8:General文件夹 通用类,存储项目移植过程中不需要更改就能直接使用的类
9:Resource文件夹 资源文件夹,用来存放和项目有关的资源,比如图片资源,文件资源等
10:Base文件夹 基类,存储项目中需要用到的基类,比如全局初始化的viewController父类, 弹窗父类, 展示表父类等

三:模块结构

1:每个大的模块如果含有较多的小模块建议多次分级(文件夹),以避免在一个模块中放入过多的类代码导致查找麻烦
2:模块命名可以汉字也可以英文,但要做到见名知意,比如:


模块层级结构

四: 类结构

1: 命名: 所有的命名都要做到见名知意, 使用英文,并且结尾要使用能表明该类或者属性 类型的文字(PS: viewController label button array model viewModel等)
   1.1 采用大驼峰命名法,PS:PayHistoryViewController(表明是 支付历史 并且是个 控制器)
   1.2: 属性命名: 采用小驼峰命名, 属性和属性之间换行已做区分, 实例变量命名要用 _xxx方式

{
 // 数据源
NSArray *_dataArray;
// 存放选中cell的字典 
NSDictionary *_selectedCellDic;
}

如果是全局属性并且在.h文件中,使用文档注释表明属性的作用,(要注意空格 比如 @property (nonatomic, strong) UILabel后面都有空格)如:

/**
 * 剩余签章次数
 */
@property (nonatomic, strong) UILabel *timesTextLabel;

/**
* 勾选
*/
@property (nonatomic, strong) UIButton *checkBtn;

/**
 * 我已阅读并同意
 */
@property (nonatomic, strong) UILabel *readLabel;

如果在.m文件中,使用 //注释说明 表明属性的作用,如:

// 剩余签章次数
 @property (nonatomic, strong) UILabel *timesTextLabel;`

// 勾选
 @property (nonatomic, strong) UIButton *checkBtn;`

// 我已阅读并同意
@property (nonatomic, strong) UILabel *readLabel;

如果是局部变量,根据情况判断是否要加注释(只需要加 // 注释);
   1.3 方法命名 同样的采用小驼峰命名, 注释方式和属性相同,如有必要可以添加#pragma mark注释, 如果有参数,并采用多行注释如有必要要在注释中 表明 参数的含义. 当参数较多时要换行以方便查看.如:

/**
 *  在window上展示
 *  model                 :数据模型
 *  signUnitPrice         :单价
 *  payTapBlock           :支付点击事件
 *  cancelTapBlock        :取消支付点击事件
- (void)showWithProduct:(PayProductModel *)model
          signUnitPrice:(NSInteger)signUnitPrice
            payTapBlock:(void(^)(void))payTapBlock
         cancelTapBlock:(void(^)(void))cancelTapBlock;

方法声命和实现时要注意空格,-(或者+)后面要有空格,{前面有空格,后面换行,方法和方法之间要换行,

2: 结构:
   2.1 首先是 头文件导入
   2.2 全局属性定义 相关宏定义 常量定义
   2.3 声命周期函数
   2.4 用户交互事件操作(各种点击事件,刷新事件,界面跳转事件)
   2.5 子视图初始化

五: 补充

   5.1 简写补充 在定义属性和方法时, 可以使用众所周知的简写代替
   5.2 事件补充 点击事件使用 xxxTapAction 长按事件使用xxxLongPressAction
   5.3 block补充 block声命时 要使用 copy, 命名时要使用大驼峰命名法,如:@property (nonatomic, copy) void (^PayTapAction)(void);
   5.4 空格位置补充 所有的操作符前后要加空格如: + - * / && || < > =

// 这里要主要空格
for (int i = 0; i < 3; i++) {

}

if (1) {
    
} else {
    // 这里else不要换行
}

while (1) {
    
}

//  这里break和 default不能忘记 
switch (1) {
    case 1:
        break;
    default:
        break;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 一. 代码规范 为了方便项目维护及交接,特制定以下代码书写规范,如有不妥之处,欢迎批评指正,有什么建议 QQ: 8...
    Balopy阅读 6,611评论 4 7
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,340评论 8 265
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • iOS 开发文档规范 Method 命名驼峰类前缀使用三个字符,避开2个字符的NS,UI,CG,CF,CA,WK,...
    沧州宁少阅读 370评论 0 1
  • 不管是学校里,还是职场上,我们应该经常能看到那些埋头苦干的人,而恰恰这种类型的人不是学习最好的,也不是工作最出色的...
    禅禅读书阅读 674评论 1 11