美文网首页
iOS object-c 规范

iOS object-c 规范

作者: likefly | 来源:发表于2018-01-30 09:38 被阅读21次

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;

相关文章

  • iOS 端编码规范文档

    iOS端编码规范 Object-C 篇 基本格式 由于 Xcode 自动补全功能,在Object-C中,命名的清晰...

  • ios编码规范

    Object-C 开发代码规范概要Object-C是一门面向对象的动态编程语言,主要用于编写IOS和MAC应用程序...

  • iOS object-c 规范

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

  • 枚举

    ps:这只是一个示例,命名规范请参考Object-C命名规范。

  • iOS OC 方法的本质

    iOS Objective -C alloc 调用流程 iOS Object-C init&new iOS OC ...

  • iOS OC 类原理

    iOS OC底层探索 iOS Objective -C alloc 调用流程 iOS Object-C init&...

  • iOS 代码规范篇

    iOS 代码规范篇 iOS 代码规范篇

  • iOS 电子书大全

    目录 《Object-C编程之道》✅ 《iOS Core Animation:Advanced Technique...

  • RN原理、优势以及架构?

    移动开发的演变:iOS Object-C SwiftAndroid Java Kotlin C C++Hybird...

  • iOS项目开发文档

    项目架构 一、基本配置 IDE工具:Xcode 开发语言:object-C iOS系统支持:iOS10.0+ iO...

网友评论

      本文标题:iOS object-c 规范

      本文链接:https://www.haomeiwen.com/subject/wsyiaxtx.html