iOS代码规范

2017-11-23  本文已影响11人  SwordDevil

前言

最近突发奇想,想到之前公司培训的代码规范,所以简单的整理一下,希望能对大家有所帮助。

正文

部分一

1. 命名
2. 内存管理

1)注意delegate用weak类型
2)用到block的地方一定要注意block块里边的对象是否出现循环引用的问题(一般根据dealloc是否正常执行可以判断)

3. 关于魔数
    if(booktype == 1) {
    } else if(booktype == 2) {
    } else if(booktype == 3) {
    }

这种情况应该在某个集中的位置或通用头文件中定义一组宏或枚举值来表示不同的类型,如

typedef NS_ENUM(NSInteger, BookTypeEnum) {
    BookType_Computer,
    BookType_Education,
    BookType_Comic
};

另外, 不仅仅硬编码的数字被称为魔数;硬编码的常量字符串也是魔数!如果两个以上(含)地方使用到同一个魔数(比如:if([nssting isEqualToString:@"methodType"])),就要在一个统一的地方以合适的名称定义一个常量或宏来表示。

4. 调试/测试

1)要善于NSAssert、assert等工具(在debug模式有效)。合理安排断言,也是对自身对业务逻辑理解程度的一个检验。(使用方式:NSAssert([curList count] > 0, @"Empty catalog list got!");//第一个参数如果不符合条件(默认应该符合),则输出第二个参数(一般为异常情况))
2) 决不要仅满足于完成代码。完成一个功能要自己完整走一下流程,在第一时间消除不必要的bug。

5. 代码管理和版本控制

1)对于未确定处理逻辑或暂时的测试代码。统一加上在上一行加上注释“///TO DO:<有待确定的内容>“,提交代码时全project搜索”TO DO:"确认。
2) 提交代码时,在commit确认框中,养成输入说明信息的习惯。说明内容要明确表述所做修改。
3) 代码要及时上传。

6.关于基类的使用
7.关于子/父视图的处理
8.关于代码结构的组织。

随着代码量的增多,代码结构的合理组织显得尤为重要。
1)建议将各个函数按功能划分区块,并用“#pragma mark -”隔开,这样可以借助XCode方便的定位代码。一般格式如下:

#pragma mark -
#pragma mark 功能区块的详细描述

2)对于category,函数的声明和定义位置一定要匹配!消除不必要的warning。
例如,在“@interface MyClass(MyExtend)"中声明的方法,一定要在“@implementation MyClass(MyExtend)”中定义,而不是在“@ implementation MyClass”中。

9.关于项目文件的组织结构。

部分二

1. NSFileManager在多线程中的使用。

[NSFileManager defaultManager]
而是alloc一个新的实例:
NSFileManager *fileMan = [[NSFileManager alloc] init];
//other code
[fileMan release];

2. 图片资源格式问题。
3、需求文档、效果图和设计文档。
4.关于静态库(static library)。

1)静态库中的对SDK Class的category不被link到app的问题,在 Other Link Flags中添加“ -ObjC”。
2)静态库中对自定义Class的category不被link到app的问题,在Other Link Flags中添加“ -all_load”。

部分三 工程目录结构

保持ViewController简单
1、View视图与ViewController分离
2、业务逻辑与ViewController分离

部分四 实践

if ([@8 isEqual:a]) // 错误
if ([a isEqual:@8]) // 正确

if (great == YES) //错误
if (great) //正确

- (void)someMethod {
  if (![someOther boolValue]) {
      return;
  }
  //Do something important
}

int -> NSInteger
unsigned -> NSUInteger
float -> CGFloat
动画时间 -> NSTimeInterval
enum -> NS_ENUM

extern NSString *const ZOCCacheControllerDidClearCacheNotification;
static NSString * const ZOCCacheControllerDidClearCacheNotification = @"ZOCCacheControllerDidClearCacheNotification";

// Foo.h
extern NSString * const ZOCFooDidBecomeBarNotification
// Foo.m
NSString * const ZOCFooDidBecomeBarNotification = @"ZOCFooDidBecomeBarNotification";

NSURL *url = ({
NSString *urlString = [NSString stringWithFormat:@"%@/%@", baseURLString, endpoint];
[NSURL URLWithString:urlString];
});

  • (void)downloadObjectsAtPath:(NSString *)path
    completion:(void(^)(NSArray *objects, NSError *error))completion;

结束语

到这里就结束了,如若不懂的话可以👇留言,也可以加入群讨论
喜欢的话 记得关注、收藏、点赞哟

群号:552048526

上一篇 下一篇

猜你喜欢

热点阅读