iOS代码规范

每个项目加上前缀如:MF
类名(标识符应当直观且可以拼读,可望文知意,英文单词一般不要太复杂,用词应当准确)
1: 大驼峰命名,每个单词首字母大写
 ViewController:             例如 MFLoginVC
 UITableViewCell:           例如 MFLoginCell
 UICollectionViewCell:       例如:MFLoginCollectionViewCell
 View :                      例如 MFLoginView
 Model :                     例如 MFLoginModel
2: 图片命名

不能有中文、大写(兼容安卓)、特殊符号、空白
建议命名方式 模块 _ 界面 _ 名称 _ 状态@nX.png

home_login_pause_selected@2x.png ;
home_login_pause_select@3x.png
3:分类的命名
UIButton+Enlarge.h
NSObject+SafeSwizzle.h
4: 整理项目请求域名,用.plist,配置不同环境的域名保存起来,上线检查plist就行
5. 文件最前面的注释,是保留了工程自动生成的注释,但是需要进行如下修改:文件作者改为个人的名字,公司名为MF software Ltd. 如:
//  ViewController.m
//  MFLoginVC
//  Created by Zhengcx on 2021-03-15.
//  Copyright (c) 2021年MF Software Ltd. All rights reserved.
6: If、else、else if、for、while、do等语句自占一行,执行语句不得紧跟其后,不论执行语句有多少都要加{}。

“{”前面添加一个空格,紧跟语句后。方法(函数)时,“{”另起一行并独 占一行书写。

if ( numberA > numberB ) {
    return numberA;
}
7: 源代码中关系较为紧密的代码应尽可能相邻
CGFloat fWidth;
CGFloat fLength;
CGFloat fHeight;
8. 类方法添加顺序 (void)viewDidLoad

pragma mark - Life Cycle 添加生命周期的方法

- (void)viewWillAppear:(BOOL)animated
- (void)viewDidAppear:(BOOL)animated
- (void)viewWillDisappear:(BOOL)animated
- (void)viewDidDisappear:(BOOL)animated
- (void)didReceiveMemoryWarning
- (void)dealloc
9. 在switch语句中,每一个case分支必须使用break结尾,最后一个分支必须是default分支。

避免漏掉break语句造成程序错误,同时保持程序简洁。对于多个分支相同处理的情况可以共用一个break,但是要用注释加以说明。

10. 循环嵌套次数不大于3次(如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数)。
建议for语句的循环控制变量的取值采用“半开半闭区间”写法
for (int x=0; x<N; x++) { //推荐
    …
}
for (int x=0; x<=N-1; x++) { //不推荐
    …
}
11: 函数的命名,参数要用描述该参数的关键字命名。
不要使用 and 来连接用属性作参数的关键字
推荐
- (int)runModalForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes;
反对
- (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes;
返回值为BOOL类型的,方法名要使用单词 is或has 做前缀
-(BOOL)isNetWorkConnected;
12. 函数方法不能为多个目的服务做到一个方法一个功能。
13. 对输入参数的正确性和有效性进行检查,很多程序错误和崩溃是由非法参数引起的(添加数组,字典之类的分类进行值保护)
14. 函数(方法)体的规模不能太大,尽量控制在100行之内(函数不利于调试,可读性差)
15. Controller控制器

MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观
控制器(Controller)--> 负责转发请求,对请求进行处理。
视图(View) --> 界面设计人员进行图形界面设计。
模型(Model) --> 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)

16. 能少用通知尽量少用,可用delegate或者block替换。
delegate修饰要用weak
@property (weak, nonatomic) id<MYWebViewDelegate> delegate;
通知发起后记得释放掉
 - (void)dealloc {
 [[NSNotificationCenter defaultCenter] removeObserver:self];
}
17. 宏的使用 FOUNDATION_EXPORT的使用方法:
FOUNDATION_EXPORT NSString * const kTestString;(.h文件)
NSString * const kTestString = @“Test”;(.m文件)
上面的这种常量定义方法就相当于
#define kTestString @“Test"; (以字母 k 开头,后面遵循大驼峰命名)
由于过多的宏定义会产生过多的二进制文件,故如果宏定义比较多,建议用FOUNDATION_EXPORT
18.代码注释
(1)多行注释采用”/* … */”, 单行注释采用 “// …”.
注释语言必须准确、易懂、简洁(需要注释)
(2)注释应与其描述的代码相近,对代码的注释应放在其上方或右方相邻位置,不可放在下方,如放于上方则需要与其上面的代码用空行隔开。
(3)注释与所描述内容进行同样地缩排。
19. release版本代码去掉NSLog打印,除了保留异常分支的NSLog。
20. 枚举常量:采用系统自带宏定义NS_ENUM、NS_OPTIONS枚举变量如:
typedef NS_ENUM(NSInteger, AppNoticeType) {
    AppNoticeTypeFault = 1, //故障提醒
    AppNoticeTypeGuard = 2,//防盗提醒
    AppNoticeTypeRoutine  //日常管理
};
21: 使用ARC
除非想要兼容一些老机器和操作系统,我们没有理由放弃使用ARC。在最新版的Xcode中,ARC是自动打开的,所以直接使用就好了
22. 在 init 和 dealloc 中不要用存取方法访问实例变量
// 正确,直接访问实例变量
- (instancetype)init {
      self = [super init];
      if (self) {
         _bar = [[NSMutableString alloc] init];
      }
      return self;
}
- (void)dealloc {
      [_bar release];
      [super dealloc];
}
23. 资源的释放按照定义的顺序释放资源

在类或者Controller的生命周期结束时,往往需要做一些扫尾工作,比如释放资源,停止线程等,这些扫尾工作的释放顺序应当与它们的初始化或者定义的顺序保持一致。这样做是为了方便调试时寻找错误,也能防止遗漏。

24.禁止将int或NSString直接转换(cast or convert)为BOOL。因为Objective-C中,BOOL被定义为unsigned char,这意味着除了YES(1)和NO(0)外它还可以是其他值。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容

  • 一、命名规范 1、统一要求含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释,使用全称,不使用缩写。 ...
    Untils阅读 564评论 0 0
  • 这里有些关于编码风格Apple官方文档,如果有些东西没有提及,可以在以下文档来查找更多细节: The Object...
    Loki9527阅读 396评论 0 0
  • iOS编程规范0规范 0.1前言 为􏰀高产品代码质量,指导广大软件开发人员编写出简洁、可维护、可靠、可 测试、高效...
    iOS行者阅读 4,456评论 21 35
  • 一、前言 本规范基于Google Objective-C Style Guide,对其中的说明性语句及非ARC部分...
    IIronMan阅读 874评论 0 6
  • 命名规范 小驼峰命名法(CamelCase):第一个单词小写字母开头,其他单词首字母大写; 大驼峰命名法(Pasc...
    廖丹_18be阅读 416评论 0 1