iOS object-c 规范

1.代码结构

函数分组和protocol/delegate中实现的代码用#pragema mark -进行分割,例如:

#pragma mark - Lifecycle
- (instancetype)init {}
- (void)dealloc {}
- (void)viewDidLoad {}
- (void)viewWillAppear:(BOOL)animated {}
- (void)didReceiveMemoryWarning {}

#prageme mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

2.代码缩进

代码缩进使用4个空格(如果使用tab要将一个tab设置为4个空格)例如:

if (enable) {
    //Do Something
}

3.代码注释

代码注释需要保持最新且有效
注释的代码尽量删掉,除非有一定要保留的理由
在能够使用代码自注释的情况下,应尽量避免使用注释

4.命名

OC的命名尽可能的将变量含义表达清楚,不必在乎过长,例如:

应该:
UIButton *settingButton
不应该简写为:
UIButton *setBtn

属性的命名采用驼峰式,单词的首字母小写。属性使用@property 关键字,不要自己手动写@ synthesize

应该:
@property (nonatomic, copy) NSString *chatPlatform;
不应该
id someValue

5.属性特性

所有属性的特性应该显式的列出来,且在定义属性变量的时候尽量按业务模块来定义。空格格式参照例子,例如

应该:
//构造方法相关变量
@property (nonatomic, assign) int64_t chatId;
@property (nonatomic, copy) NSString *cmId;

//表情动画相关变量
@property (nonatomic, strong) LPEmojiAnimationView *smileAnimationView;
@property (nonatomic, strong) LPEmojiAnimationView *heartAnimationView;
不应该:
@property (nonatomic,weak)IBOutlet UIView *containerView;
@property(nonatomic) NSString *tutorialName;

NSString 应该使用copy而不是使用strong

6.变量

  • 变量的命名应该用描述的方式命名,不要用数字、单个字符来命名
    应该:
    CGFloat imageHeight = 44.0f
    
    不应该:
    CGFloat h = 44.0f
    
  • 星号表示变量是指针。例如,NSString *text,不是 NSString * text也不是NSString* text

7.方法

方法的命名,应该在方法的类型(-/+)之后有一个空格。在方法的各个段之间应该也有一个空格。在参数之前应该包含一个描述该参数的关键字。

应该:
- (void)setUserName:(NSString *)name headImage:(UIImage *)headImage;
不应该:
- (void)setUserName:(NSString *)name  h:(UIImage *) headImage;

8.字面值

NSStringNSDictionaryNSArrayNSNumber的 字面值应该在创建这些类的不可变实例时被使用。但是nil值不能传入NSDictionaryNSArray字面值,会导致crash。

应该:
NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];
NSDictionary *productManagers = @{@"iPhone": @"Kate", @"iPad": @"Kamal", @"Mobile Web": @"Bill"};
NSNumber *shouldUseLiterals = @YES;
NSNumber *buildingStreetNumber = @10018;
不应该:
NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil];
NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil];
NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES];
NSNumber *buildingStreetNumber = [NSNumber numberWithInteger:10018];

9.常量

常量是容易被重复使用和代替就能快速修改的值。常量应使用static来声明而不是用#defeine定义一个宏来代替。

应该:
static NSString *MyCellIdentifier = @"MyCellIdentifier";
static CGFloat const MyCellHeight = 44.0f;
不应该:
#define MyCellIdentifier = @"MyCellIdentifier";
#define MyCellHeight = 44.0f;

#define 的使用建议用于一些宏函数的定义,例如

#define RGBCOLOR(r, g, b)  [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]

10.Case 语句

打括号在case语句中并不是必须的,除非编译器强制的要求。当一个case语句有多行代码的时候,打括号应该加上
例如:

switch (condition) {
  case 1:
    // ...
    break;
  case 2: {
    // ...
    // Multi-line example using braces
    break;
  }
  case 3:
    // ...
    break;
  default: 
    // ...
    break;
}

11.布尔值

Objective-C使用YESNO。不要使用true和false。nil解析成NO,所以没有必要再条件语句中比较。不要拿某样东西直接与YES比较。

应该:
if (someObject) {}
if (![anotherObject boolValue]) {}
不应该:
if (someObject == nil) {}
if ([anotherObject boolValue] == NO) {}
if (isAwesome == YES) {} // Never do this.
if (isAwesome == true) {} // Never do this.

12.条件语句

条件语句主体为了防止出错应该使用大括号包围,即使条件语句主体能够不用大括号编写(如,只用一行代码)。这些错误包括添加第二行代码和期望它成为if语句;还有,even more dangerous defect可能发生在if语句里面一行代码被注释了,然后下一行代码不知不觉地成为if语句的一部分。除此之外,这种风格与其他条件语句的风格保持一致,所以更加容易阅读。

应该:
if (!error) {
  return success;
}
不应该:
if (!error)
  return success;
或
if (!error) return success;

13.三目运算符

当需要提高代码的清晰性和简洁性时,三元操作符?:才会使用。单个条件求值常常需要它。多个条件求值时,如果使用if语句或重构成实例变量时,代码会更加易读。一般来说,最好使用三元操作符是在根据条件来赋值的情况下。

Non-boolean的变量与某东西比较,加上括号()会提高可读性。如果被比较的变量是boolean类型,那么就不需要括号。

应该:
NSInteger value = 5;
result = (value != 0) ? x : y;

BOOL isHorizontal = YES;
result = isHorizontal ? x : y;
不应该:
result = a > b ? x = c > d ? c : d : y;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS编程规范0规范 0.1前言 为􏰀高产品代码质量,指导广大软件开发人员编写出简洁、可维护、可靠、可 测试、高效...
    iOS行者阅读 4,564评论 21 35
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,395评论 0 13
  • 推荐文章:禅与 Objective-C 编程艺 前言 为􏰀高产品代码质量,指导广大软件开发人员编写出简洁、可维护、...
    WolfTin阅读 2,917评论 0 1
  • 牵扯了阿拉斯加的风度 大片的冰河极光匍匐仰望 也许你也不曾想过 下一次穿越空气和光 你是为什么游荡在远和近的罅隙 ...
    觅安阅读 464评论 0 0
  • 一.绵绵的雨 1. 雨还在下。 已经没完没了地持续几天了,好像提前进入了梅雨季节。 李瀚站在门口,看着雨滴打在石板...
    昆仑濯羽阅读 607评论 5 5

友情链接更多精彩内容