【问题标题】:Objective C: How to review code in iOS [closed]目标 C:如何在 iOS 中查看代码 [关闭]
【发布时间】:2014-09-26 12:07:57
【问题描述】:

我是堆栈溢出的新用户,我也是一名 iOS 开发人员。我想知道如何查看我们的代码?

通过编码的命名约定是什么?变量名、类名的准则是什么。我们该如何管理呢?

【问题讨论】:

  • 它将遵循与 99% 的编码语言相同的约定。我不太清楚你所说的 我们如何管理这个?
  • 基本命名约定与 C/C++/Java 相同:类名前导大写,变量名前导小写,#define 名称全部大写。常量和枚举的命名约定没有得到很好的解决。
  • @jbutler483 - 微软(当然)对 C 风格的语言使用自己的约定,非 C 风格的语言也往往不同,所以它与所有编码语言都不一样"。
  • 命名约定见Coding Guidelines for Cocoa

标签: ios objective-c iphone swift


【解决方案1】:

Apple 制定了一套关于如何编写代码以实现最大清晰度和与框架集成的指南。此外,还有一些 Cocoa 开发人员经常使用的未记录的约定。

类名:

  1. 类名总是大写的。

  2. Objective-C 没有命名空间,因此请在类名前加上首字母。这避免了“命名空间冲突”,即两段代码具有相同名称但执行不同操作的情况。 Cocoa Dev Central 创建的类可能会以“CDC”为前缀。

  3. 如果您是标准 Cocoa 类的子类,最好将您的前缀与超类名称结合起来,例如 CDCTableView

变量名称:

  1. 变量名称以小写字母开头,但在出现新单词的地方都内部大写:

     NSString * streetAddress  = @"1 Infinite Loop";
     NSString * cityName       = @"Cupertino";
     NSString * countyName     = @"Santa Clara";
    

--------- 正确的方式 ---------

     NSString       * hostName;
     NSNumber       * ipAddress;
     NSArray        * accounts;

--------- 错误的方式 ---------

     NSString       * HST_NM;      // all caps and too terse
     NSNumber       * theip;       // a word or abbreviation?
     NSMutableArray * nsma;        // completely ambiguous
  1. 变量不能以数字、空格、下划线以外的特殊字符开头。

  2. Apple 不鼓励使用下划线作为私有实例变量的前缀。

     NSString * name    // correct!
     NSString * _name   // _incorrect_
    

变量名称:指示类型

  1. 在实际实践中,如果变量名是常见的 NSString、NSArray、NSNumber 或 BOOL,则通常不表示类型。

正确

     NSString       * accountName;
     NSMutableArray * mailboxes;
     NSArray        * defaultHeaders;
     BOOL             userInputWasUpdated;

可以,但不理想

     NSString       * accountNameString;
     NSMutableArray * mailboxArray;
     NSArray        * defaultHeadersArray;
     BOOL             userInputWasUpdatedBOOL;
  1. 如果变量不是这些类型之一,则名称应反映它。此外,有些类您只需要一个实例。在这种情况下,只需根据类名命名变量。字体管理器就是一个很好的例子。

何时指示类型

     NSImage             * previewPaneImage;  // self-explanatory
     NSProgressIndicator * uploadIndicator;   // shows progress for uploads
     NSFontManager       * fontManager;       // only one of these, basic name ok

方法名称

  1. 方法也许是我们可以谈论的最重要的话题。大多数面向对象的语言都使用语法。

  2. 虽然这些方法名称在第一次编写时很容易,但实际行为并不清楚。在大量的周围代码中,这更是一个问题。

  3. Cocoa 程序员从头思考,根据实际使用中的外观选择方法名称。假设我想写一个内存中的文件对象写入磁盘。

在 Cocoa/Objective-C 中,它看起来像这样:

    [fileWrapper writeToFile: path atomically: YES updateFilenames: YES];

方法名称:访问器

  1. 与许多其他语言相比,Objective-C 不鼓励在简单访问器上使用“get”前缀。实例变量和方法可以具有相同的名称,因此请使用此名称:

正确!

      - (NSString *) name;
      - (NSString *) color;

      name  = [object name];
      color = [object color];

不正确

      - (NSString *) getName;
      - (NSColor  *) getColor;

      name  = [object getName];
      color = [object getColor];
  1. 但是,“get”前缀用于通过内存地址间接返回值的情况:

何时使用“获取”前缀

// 将对象从 NSArray 复制到缓冲区中

      id *buffer = (id *) malloc(sizeof(id) * [array count]);
      [array getObjects: buffer];
      ( Don't worry if you don't know what malloc does. )
      The "set" prefix is always used on setters, though:


      [object setName:  name];
      [object setColor: color];

形容词

  1. 并非所有访问器都返回名称、日期、身高等值。有些代表对象的特殊品质。这些通常由 BOOL 表示。

  2. 例如,“可选”。在 Objective-C 中,该键的 getter 称为 -isSelectable,但 setter 是 -setSelectable:

        BOOL selectable = [textView isSelectable];
        BOOL editable   = [textView isEditable];
    
        [textView setSelectable: YES];    // no "is"
        [textView setEditable:   YES];    // no "is"
    
         // if textview is editable.
    
        if ([textView isEditable])
        [textView setEditable: NO];
    
  3. 请记住,根据所有这些规则命名您的访问器不仅仅是一个清晰和美观的问题。 Cocoa 在很大程度上依赖于 KVC,而 KVC 依赖于正确命名的访问器。

我想这会对你有所帮助。

【讨论】:

  • 不是我不同意,而是你从一开始就使用 Apple Disourage。那么你有任何文档来支持这些陈述吗?顺便说一句,我确实同意您回答中的很多内容,只是认为文档也可以做得更好。
  • 我接受这个答案,我认为这是一些明确的答案:)
  • “Apple 不鼓励使用下划线作为私有实例变量的前缀”。不对。当使用支持属性的实例变量时,正是您应该使用下划线的时候。
  • 我注意到您在课程类别方面遗漏了一件事。类类别文件命名约定应该类似于CDCTableView+CategoryName.h,其中 CategoryName 是您创建的类别的名称。也同意 Rob 这就是要求提供文档的原因。
  • 为 ivars 重新添加前缀,下划线 is 推荐用于 ivars 支持属性。根据 Coding Guidelines for CocoaDeclared Properties and Instance Variables:“通常,您不应该直接访问实例变量;相反,您应该使用访问器方法(您可以直接在 init 和 dealloc 方法中访问实例变量)。帮助表示这一点,在实例变量名称前加上下划线 (_)..."
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
相关资源
最近更新 更多