Objective-C 编码规范?

27

我已经自学了大约6个月的Objective-C,并且很喜欢使用这种语言。但是我没有找到任何好的编码规范,所以我编写的代码总是看起来不一致。

像命名约定之类的东西完全可以继承下来,但是缩进、间距和(不可能的?)80个字符行宽却表现不佳。

你使用什么样的Objective-C约定呢?

这里是一个小例子,展示了一些问题:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {

        self.navigationItem.leftBarButtonItem = 
        [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                                       target:self.parentViewController 
                                                       action:@selector(done:)] autorelease];

        NSString* units = [[NSString alloc] initWithFormat:@"%@", @"oz"];
        NSString* optionOne = [[NSString alloc] initWithFormat:@"[%d%@] Calculate", 100, units];

        self.options = [[NSMutableArray alloc] initWithObjects: 
                        optionOne, 
                        @"Configure Portions", 
                        @"Configure Notifications",
                        @"Help",
                        nil];

        [units release];
        [optionOne release];
        [tableView reloadData];
    }
    return self;
}

https://github.com/raywenderlich/objective-c-style-guide#language - geekay
5个回答


8

很好的问题,感谢您的提问。

以下是我个人的编码标准:

  1. 我不坚持每行80个字符,但我尽量保持在120个字符以下。Obj-C是一种词汇丰富的语言,有“命名”参数,而Cocoa是一个更加繁琐的框架。我很少需要在VT220上编辑代码。
  2. 我通常不会像Xcode建议的那样用“:”垂直对齐来拆分长的方法调用。我倾向于传统的直接书写,根据需要换行,缩进一个制表位。
  3. 当这变得非常笨重时,我会将对象的创建和使用分成多行。例如,在上面的例子中,我可能会一行上创建选项数组,然后在下一行上进行 [self setOptions:...] 。这样可以使调试更简单。
  4. 我不使用点符号表示属性的访问,因为我发现它隐藏了行为。我使用传统的 [object property] 符号。
  5. 我从未令人满意地解决过ivar和局部变量的命名问题。Xcode会以不同的颜色显示它们,这通常已经足够了,但是深深植根于我内心的微软人认为实例范围前缀是有用的,例如 m_ 或至少_。但我通常不这样做,因为它不好看。而且我们苹果人讨厌不好看的东西。 :)

(值得一提的是,在您上面的示例中,您可以直接使用 -[NSString stringWithFormat:...] 来获得自动释放的字符串,而不是使用 alloc/init/release。)


3
+1. 我基本上遵循相同的准则,也不太喜欢东波兰圣诞树符号表示法 - dreamlax
1
@dreamlax:对于那个符号名称点赞。 - Ben Zotto
除了这些出色的建议,我还会利用Xcode重新缩进整个文件时得到的任何缩进。手动缩进是浪费时间的,幸运的是,Xcode做得相当不错。 - bbum
1
关于代码行长度的好建议。在过去的几年里,我为大多数开源Objective-C项目做出了贡献,它们使用了120个字符的行限制,但忽略了80个字符的限制 - 正如你所说,Objective-C有点“啰嗦”,无法坚持80个字符的限制。通常,120个字符的限制是一个软性限制 - 如果你稍微超过了一点,但你的代码可读性良好,那就没问题。 - mipadi
我没有问题将我的代码行限制在80个字符以内。除此之外,我比苹果公司更多地添加了水平的空白间隔。例如,在冒号和参数类型之间。 - JeremyP
2
在编程中,给实例变量加上前缀“_”是一种良好的习惯,并且被苹果公司所鼓励:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingIvarsAndTypes.html#//apple_ref/doc/uid/20001284-1001757 - Johannes Fahrenkrug

5

2

这可能与大家的看法不同,但是我不会为单独的行进行缩进,而是打开自动换行功能。这样做的好处是,您可以缩小/拉伸窗口,并且代码始终看起来很好,而且无需浪费时间去调整换行符和制表符/空格以使代码看起来可接受。


这正是我所做的。 - Rudolf Adamkovič

1
这是另一个不错的资源:(我是新手,所以它不允许我在同一个答案中发布两个链接)http://cocoadevcentral.com/articles/000082.php(Cocoa Style for Obj C part 1 of 2)
第二部分是相同的链接,但以000083.php结尾。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接