OC代码书写规范

1##使用空格 缩进 ##每一行最大长度为80 过长导致可读性问题

2###函数的书写

  • (void)writeVideoFrameWithData:(NSData *)frameData timeStamp:(int)timeStamp { ... } 在- 与(void)中有一个空格 尾部有一个空格 (小写字母开头 驼峰命名法)

如果一个函数有特别多的参数或者名称很长,应该将其按照:来对齐分行显示:

-(id)initWithModel:(IPCModle)model
       ConnectType:(IPCConnectType)connectType
        Resolution:(IPCResolution)resolution
          AuthName:(NSString *)authName
          Password:(NSString *)password
               MAC:(NSString *)mac
              AzIp:(NSString *)az_ip
             AzDns:(NSString *)az_dns
             Token:(NSString *)token
             Email:(NSString *)email
          Delegate:(id<IPCConnectHandlerDelegate>)delegate;
复制代码

如果第一个名称过短 后续要注意缩进

3###函数调用

函数调用的格式和书写差不多,可以按照函数的长短来选择写在一行或者分成多行: //分行写,按照':'对齐 [myObject doFooWith:arg1 name:arg2 error:arg3];

按照:对齐而不是关键字 block 四个空格缩进

4###数据结构的语法糖

应该使用可读性更好的语法糖来构造NSArrayNSDictionary等数据结构,避免使用冗长的alloc,init方法。

如果构造代码写在一行,需要在括号两端留有一个空格,使得被构造的元素于与构造语法区分开来:

//正确,在语法糖的"[]"或者"{}"两端留有空格
NSArray *array = @[ [foo description], @"Another String", [bar description] ];
NSDictionary *dict = @{ NSForegroundColorAttributeName : [NSColor redColor] };

//不正确,不留有空格降低了可读性
NSArray* array = @[[foo description], [bar description]];
NSDictionary* dict = @{NSForegroundColorAttributeName: [NSColor redColor]};
复制代码

构造代码不再同一行 缩进两个字符

5###命名规范 (1)清晰 命名应该尽可能的清晰和简洁,但在Objective-C中,清晰比简洁更重要。由于Xcode强大的自动补全功能,我们不必担心名称过长的问题。 ``objective-c //清晰 insertObject:atIndex:

//不清晰,insert的对象类型和at的位置属性没有说明 insert:at:

//清晰 removeObjectAtIndex:

//不清晰,remove的对象类型没有说明,参数的作用没有说明 remove:

(2)不要使用单词的简写,拼写出完整的单词:

然而,有部分单词简写在Objective-C编码过程中是非常常用的,以至于成为了一种规范,这些简写可以在代码中直接使用,下面列举了部分:

```objective-c
alloc   == Allocate					max    == Maximum
alt     == Alternate				min    == Minimum
app     == Application				msg    == Message
calc    == Calculate				nib    == Interface Builder archive
dealloc == Deallocate				pboard == Pasteboard
func    == Function					rect   == Rectangle
horiz   == Horizontal				Rep    == Representation (used in class name such as NSBitmapImageRep).
info    == Information				temp   == Temporary
init    == Initialize				vert   == Vertical
int     == Integer

(3)使用前缀 
工程十分大 拆分为不同的模块 用到前缀 
前缀由大写的字母缩写组成
可以在为类、协议、函数、常量以及typedef宏命名的时候使用前缀
命名前缀的时候不要和苹果SDK框架冲突

###命名类和协议(Class&Protocol)
类名以大写字母开头,应该包含一个*名词*来表示它代表的对象类型,同时可以加上必要的前缀,比如`NSString`, `NSDate`, `NSScanner`, `NSApplication`等等。

而协议名称应该清晰地表示它所执行的行为,而且要和类名区别开来,所以通常使用`ing`词尾来命名一个协议,比如`NSCopying`,`NSLocking`。

###命名方法(Methods)

以小写字母打头 每个后续单词第一首字母大写

如果方法表示让对象执行一个动作,使用动词打头来命名,注意不要使用`do`,`does`这种多余的关键字,动词本身的暗示就足够了:

```objective-c
//动词打头的方法表示让对象执行一个动作
- (void)invokeWithTarget:(id)target;
- (void)selectTabViewItem:(NSTabViewItem *)tabViewItem;

获取一些属性值 不要添加多余的动词

多个参数的话 务必说明参数的作用 
不要用`and`来连接两个参数,通常`and`用来表示方法执行了两个相对独立的操作(*从设计上来说,这时候应该拆分成两个独立的方法*): 用with 

命名实例变量,在变量名前加上`_`前缀(*有些有历史的代码会将`_`放在后面*),其它和命名属性一样:

```objective-c
@implementation MyClass {
    BOOL _showsTitle;
}

###不要使用new方法

尽管很多时候能用`new`代替`alloc init`方法,但这可能会导致调试内存时出现不可预料的问题。Cocoa的规范就是使用`alloc init`方法,使用`new`会让一些读者困惑。

不要将bool型与yes比较 
```objective-c
//错误,无法确定|great|的值是否是YES(1),不要将BOOL值直接与YES比较
BOOL great = [foo isGreat];
if (great == YES)
  // ...be great!

//正确
BOOL great = [foo isGreat];
if (great)
  // ...be great!

同样的,也不要将其它类型的值作为BOOL来返回,这种情况下,BOOL变量只会取值的最后一个字节来赋值,这样很可能会取到0(NO)。但是,一些逻辑操作符比如`&&`,`||`,`!`的返回是可以直接赋给BOOL的:

```objective-c
//错误,不要将其它类型转化为BOOL返回
- (BOOL)isBold {
  return [self fontTraits] & NSFontBoldTrait;
}
- (BOOL)isValid {
  return [self stringValue];
}

//正确
- (BOOL)isBold {
  return ([self fontTraits] & NSFontBoldTrait) ? YES : NO;
}

//正确,逻辑操作符可以直接转化为BOOL
- (BOOL)isValid {
  return [self stringValue] != nil;
}
- (BOOL)isEnabled {
  return [self isValid] && [self isBold];
}
复制代码

总结 就是不能返回逻辑运算的数 要返回yes或者no

nil的判断 用

//正确,直接判断
if (!objc) {
  ...  
}

//错误,不要使用nil == Object的形式
if (nil == objc) {
  ...  
}

delegate 用的是weak  因为要引用自身 导致循环引用


gettter 和setter 全部放在最后 
先是life cycle,然后是Delegate方法实现,然后是event response,然后才是getters and setters。这样后来者阅读代码时就能省力很多。

代理方法放一块 
点击事件  


复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值