一. 代码规范
为了方便项目维护及交接,特制定以下代码书写规范,如有不妥之处,欢迎批评指正,有什么建议 QQ: 825592997
我.
1. 文件结构
文件结构一般按模块或页面分类, 每个页做一个文件夹, 每个文件夹下, 再分 Controller, View, Model 或 ViewModel 文件夹, 用于放置,需要的文件.
文件夹名一定要书写规范. 如:首页----> Home 或 HomePage 或 ShouYe.
MVC
![Uploading 书写规范_431195.png . . .].png
2. 命名规则
2.1 声明 类 或 方法 要求:见名知义
类 名使用首字母大写的驼峰标识命, 自定义名在前, 类名在后 如 HomeViewController, Home(自定义名) + ViewController(控制器类型).
#import "VideoDetailViewController.h"
#import "HomeBannerModel.h"
#import "MessageDetailWebView.h"
方法名 首字母小写的驼峰标识命名, 注意空格的使用,参数过多时,可换行保持对齐。
可以使用 #pragma mark -----作标记, 备注方法功能/作用
#pragma mark ---- 声明方法的作用 或功能 ----
- (id)initWithUserId:(NSString *)userId
andVideoId:(NSString *)videoId
key:(NSString *)key;
也可以使用 /** 注释 */ 详细介绍方法, 参数, 返回值等信息
/**
* @brief 初始化 DWDownloader <功能介绍>
* 参数说明
* @param userId 用户ID,不能为nil
* @param videoId 视频ID,不能为空
* @param key 用户秘钥,不能为nil
* 该初始方法仅为获取视频下载信息使用
*
* @return 下载对象
*/
- (id)initWithUserId:(NSString *)userId
andVideoId:(NSString *)videoId
key:(NSString *)key;
1.2 变量名
变量名以小写字母开头,禁止出现:aa
,bb
…,arrayIndex
—-> arrayInde
(两者识别度小的也不要这样写),这样的变量。仍然要见其名知其义,如:int courseId //课程ID
1.3 注释
根据个人喜好使用注释标记
/** 序号 * 注释说明 */
//MARK:注释说明
//TODO:注释说明
//注释说明
1.4 实例变量声明时,前加下划线“_”。
{
//数据源
NSArray *_dataArray;
//存放选中cell的字典
NSDictionary *_selectedCellDict;
//课程名
NSString *_courseName;
//用户ID
NSUInteger *_userId;
}
属性声明加注释
/** * 资讯详情头model */
@property (nonatomic, strong) MessageDetailHeaderModel *msgModel;
/** * 资讯导航栏 */
@property (nonatomic, weak) MessageDetailNavBar *msgNavBar;
/** * 资讯详情webView */
@property (nonatomic, weak) MessageDetailWebView *msgWebView;
2.5 if / switch 判断语句的书写
if (i == 1) {
//code:here you can do something
} else {
//code:here you can do something
}
每个执行语句, 最好用{}
括起来.
switch (i)
{
case 0: {
//code:here you can do something
}
break;
case 1: {
//code:here you can do something
}
break;
default:
break;
}
2.6 方法实现文件(.m), 代码的书写结构
尽可能保证 .h 文件的简洁性和安全性,可以不公开的API尽量写在 .m 文件中。
一般原生的方法, 写在上面, 自定义方法, 向下靠.
方法位置.png二.项目框架及三方工具
1. 框架
本项目框架是基于 UITabBarViewController + UINavigationViewController 设计, 第三工具类使用 cocoapods
管理, 设计模式以 MVC 为主, 部分模块使用 MVVM, MVP(面向协议) 模式编程.
每个功能模块都包含 Model, View, Controller, Tool, Service, 用于数据处理, 渲染, 用户交互等, 整体架构如下
2. 结构
为方便开发和维护, 各功能模块, 文件夹分类确保清晰明了. 具体文件结构如下图所示
MVC.png三. 第三方直播/点播集成
第三方的直播点播, 只要根据开发文档
一步步做就行了.
1. CC集成
2. 保利威视集成
3. 乐视集成
3. 展示互动集成
四. 注意事项
1. 抽项目规范
- 抽项目,版本问题,一定要看版本,确保和PC端接口是一致的;
- 抽项目,版本问题,遵循修改量少,bug少的原则去选择性抽取合适的版本;
- 抽项目,logo、启动图、引导页、和主色调保持一致的图片以及加载图,都要换成客户的图片,不允许出现非客户图片;
- 抽项目,项目里面的关键字以及项目名称都需改成客户的,(特别是关于里面);
- 抽项目,给客户演示之前,一定要确保基本功能的正常使用,比如:视频播放,返回数据结构可能不同,id一定要分清楚,确保每个视频播放id与后台接口对应,避免出现由于数据结构不同而导致的闪退情况;
- 抽项目,除了保证一些定制功能没问题之外,也要保证基于demo的标准功能没问题,因为更换域名之后,可能会出现意想不到的问题,一定要亲力亲为,为自己做的项目负责;
- 抽项目,第三方分享,第三方登录,以及视频播放这些需要配置key值的功能,一定要确保key值配置正确,避免出现因为配置出错而增加维护时间;
- 抽项目,关于内购,内购测试的时候,需要注意保证客户开发者账号正常使用,银行信息填写完成,然后测试内购时,Bundle Identfier一定确保和线上创建应用一摸一样,确保运行时测试证书是此客户的开发者证书,确保proudctId和你添加的内购商品id一模一样。
银行信息填写完整的示例:
2. 项目中常见问题
- 布局问题,有时候写约束要考虑到各种情况,以及各个机型的适配,类似下面问题,注意一下.
- 加载图标的样式和加载时常问题,网校、考试、社区,加载图标要保持一致;
- 内购问题,内购充值界面的加载图标,以及内购正在加载是取消购买出现的问题;
- 退出登录后,我的钱包的金额,抽项目时退出登录后发现金额还在;
- 本机课程的优化,现在不管是登录购买还是未登录购买,都在我的课程中,分层不是很清晰,体验不是很好。
- 第三方登录,获取昵称问题,确保获取的是第三方应用的昵称;
- 这防止重复推出页面
if (![[super topViewController] isKindOfClass:[viewController class]]) {
//如果和上一个控制器一样,不做操作
[super pushViewController:viewController animated:animated];
}
- 防止按钮重复点击,加一个延时, 或使用runtime, 写一个工具类.
self.commentAdd.enabled = NO;
[self performSelector:@selector(resetButtonAction) withObject:nil afterDelay:1.5];
- (void)resetButtonAction {
self.commentAdd.enabled = YES;
}
网友评论