• Objective-C代码规范


    第一话   官方代码规范

    Objective-C 编码规范,内容来自苹果、谷歌的文档翻译,自己的编码经验和对其它资料的总结。

    概要

    Objective-C 是一门面向对象的动态编程语言,主要用于编写 iOS 和 Mac 应用程序。关于 Objective-C 的编码规范,苹果已经有很好的总结:

    本文主要整合了对上述文档的翻译、作者自己的编程经验和其他的相关资料,为公司总结出一份通用的编码规范。

    网站:http://www.cocoachina.com/ios/20150508/11780.html

    第二话  自己的一些经验之谈

    类(Class)命名原则

      就拿“NSMutableArray”来说 

      NS --- 前缀(Prefix)我的理解是表示类所属的“包”,这里的NS就表示的是Cocoa的基础类库,取公司名项目名什么的。(NS是NextStep公司的简写,里面的渊源就不细说了- -)前缀的意义就在于比较直观的划分了类的所属和范围。像Cocos2d里的前缀就是CC,box2d里面是B2,UserInterface->UI,CoreFoundation->CF,CoreGraphics->CG。如果我也能写一个开源架构或模块的话,我应该会取“SY”或是“Sunny”吧 :)
      MutableArray --- 类名,简短明确的形容类所表示的内容。首字母大写,驼峰标示。另外值得注意的是,由于NSMutableArray是NSArray的扩展子类,本质上形容的都是Array,所以应该保留父类的识别字样“Array”,但NSObject到NSArray不应该起名成NSArrayObject,也是避免了语义的重叠。

    成员变量与属性存取器(Accessor)命名原则

      这也是让我纠结了挺久,一直不懂为什么很多代码里面类成员变量出现了下划线"_",而属性存取方法@property声明时不加下划线,实现时@synthesize又令两个名字相等。 

    @interface SunnyTest : NSObject 
    {
        NSArray * _array;  
    }
    @property (nonatomic,retain) NSArray * array;
    @end
    @implementation SunnyTest
    @synthesize array = _array;
    @end

      这样做的原因很简单,就是不暴露实例的成员变量,外界只能用@property声明的存取名来访问成员变量,所以就用下滑线加以区分。

      但在类内方法访问成员变量时就直接使用带下划线的名字,个人认为不要用self.xxxxx来使用,因为使用存取器本来就是对外的,在内部使用可能会造成一些不必要的错误,比如:

    self.array = [[NSArray alloc] init]; //内存泄露

      这时就会造成内存泄露,因为[[NSArray alloc] init]生成NSArray对象之后赋值给self.array,由于array的存取方法中包含retain,这会使retainCount变成2,而实际应该是1,内存泄露且很难发现。

      改成这样的写法也是苹果官方推荐的。

    _array = [[NSArray alloc] init];

    方法(Method)起名规则

      一个规范的方法读起来应该像一句完整的话,读过之后便知函数的作用。执行性的方法应该以动词开头,小写字母开头,返回性的方法应该以返回的内容开头,但之前不要加get。

    - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
    + (id)arrayWithArray:(NSArray *)array;

      如果有参数,函数名应该作为第一个参数的提示信息,若有多个参数,在参数前也应该有提示信息(一般不必加and)

      一些经典的操作应该使用约定的动词,如initWith,insert,remove,replace,add等等。

  • 相关阅读:
    (收藏)基于.net开发平台项目案例集锦
    记录:在ASP.NET中使用ActiveX插件时遇到的问题
    [转]三种邮件服务器的比较
    (收藏)30岁,开始实现我的程序员梦
    [转]加密狗原理介绍
    从临时表返回数据时遇到的问题(ORA08103: object no longer exists)
    Response.Flush的使用心得
    C#编程向VFP数据库中插入Numeric型的值(foxpro,dbf)
    [转]Web部件错误:此网页存在致命错误
    Win2003Server出现了很多的“桌面”
  • 原文地址:https://www.cnblogs.com/wangbinios/p/5123735.html
Copyright © 2020-2023  润新知