Objective-C编码规范[译]

俗的家装模式被,用户用陷入泥潭,其中一个生死攸关由就是装饰行业的“水最好老”。这里的“水最死”主要是坐家装行业涉及到之行业比较广泛,环节比较多,流程难以将控……互联网家装公司为能够俘获这些用户之心底,则指向传统家装遇到的例外问题,推出一个并且一个新定义:整家装修、一站式装修、一键式装修……结合家装行业之材料价格不透明,互联网家装公司出产了“F2C”的模式,即透过互联网的模式,将用户装修所需要的资料直接由工厂供应及用户家里;结合家装过程当中流程难以监控之题目,互联网家装公司则透过APP与实地的监督设备源源,实现装修现场的24时监督;结合家装过程当中设计无符合实际的景,互联网家装公司虽借助新的测工具,通过对房屋进行360°的测,实现房屋数量的标准、全面……这些互联网的招数还是指向传统家装的题材和弊病进行的换代,它们所勾画的愿景让大用户开始相信互联网家装能够化解这些弊端,真正受他俩之装裱带来改变,

  • 本来文链接 : The official raywenderlich.com Objective-C style
    guide

于“互联网+”时代起的初物都见面给人们勾勒一个美好愿景一样,互联网家装的起平也深陷泥潭的用户描绘了一个美好的蓝图。在当下幅蓝图里,他们不再吃风家装的各种弊端所牵绊,获得了自真正想要之装裱效果。一个由于互联网引发的家装行业之异常变革时代仍到来,人们想着这个时期的赶到,长期陷入传统家装泥潭的他俩迫切希望即将来到之斯时期会让她们的装潢带来本质性的变革。

布尔值

Objective-C使用YESNO。因为truefalse有道是单纯当CoreFoundation,C或C++代码使用。既然nil解析成NO,所以没有必要当标准化语句比较。不要将某样东西直接跟YES比较,因为YES给定义为1以及一个BOOL会被设置为8个。

眼看是为了以不同文件保持一致性和在视觉上进一步简洁而考虑。

应该:

if (someObject) {}
if (![anotherObject boolValue]) {}

不应该:

if (someObject == nil) {}
if ([anotherObject boolValue] == NO) {}
if (isAwesome == YES) {} // Never do this.
if (isAwesome == true) {} // Never do this.

如果BOOL特性之名字是一个形容词,属性就会忽视”is”前缀,但只要指定get访问器的惯用名称。例如:

@property (assign, getter=isEditable) BOOL editable;

言及例子从此间引用Cocoa Naming
Guidelines

<b id=”conditionals”></b>

得一定之凡,这些互联网家装概念的提出的确有助于改变这用户指向家装问题跟弊病之认识,但是出几许值得注意的是上文所涉及的那些互联网家装创新模式只是局部创新性的定义而已,真正落地还索要过多之劳作一经做,最要的凡这些新的概念并无关联到家装行业遭遇用户最为关注的庐山真面目问题——用户体验。

三元操作符

当需要增强代码的清晰性和简洁性时,三元操作符?:才见面使。单个条件求值常常用它们。多单原则求值时,如果应用if语或更做实例变量时,代码会越来越易读。一般的话,最好以三元操作符是当因标准来赋值的状态下。

Non-boolean的变量和某东西比,加上括号()会增强可读性。如果被于的变量是boolean类型,那么就算无欲括号。

应该:

NSInteger value = 5;
result = (value != 0) ? x : y;

BOOL isHorizontal = YES;
result = isHorizontal ? x : y;

不应该:

result = a > b ? x = c > d ? c : d : y;

<b id=”init-methods”></b>

用,互联网在改造家装行业流程时的无法注定了她才是改造家装行业的“马前卒”,等到它们以改造家装行业时相遇新题材之早晚,必须发新的手法跟方法开展缓解,才能够吃互联网改造家装行业之音频继续展开。只有不断找到新的解决办法,不断用新的理念、技术、手段才会不辱使命家装行业的末尾改革。

目录

  • 语言
  • 代码组织
  • 空格
  • 注释
  • 命名
    • 下划线
  • 方法
  • 变量
  • 性能特性
  • 点符号语法
  • 字面值
  • 常量
  • 枚举类型
  • Case语句
  • 个体属性
  • 布尔值
  • 极语句
    • 元旦操作符
  • Init方法
  • 类构造方法
  • CGRect函数
  • 黄金路线
  • 错误处理
  • 单例模式
  • 换行符
  • Xcode工程

<b id=”language”></b>

财力关注的一个要方面纵用户。为了赢得资产的关注,很多互联网家装企业还见面拿抱用户作为自己之上进至关重要,想如果获得用户之关心,其中特别重大的一些纵是因不断创新的互联网家装的定义来诱惑用户。正巧使上文所关联的那样,这种浅薄的概念,并无可知被用户之家装体验带来精神的改变,用户真正感受及之还是家装过程中的经验。

错误处理

当方法通过引用来回到一个荒谬参数,判断返回值如果休是荒谬变量。

应该:

NSError *error;
if (![self trySomethingWithError:&error]) {
  // Handle Error
}

不应该:

NSError *error;
[self trySomethingWithError:&error];
if (error) {
  // Handle Error
}

当功成名就的状况下,有些Apple的APIs记录垃圾值(garbage
values)到左参数(如果non-NULL),那么判断错误值会招致false负值和crash。

<b id=”singletons”></b>

互联网在改造庞大的家装产业链时出现的一筹莫展的状态最终造成了互联网家装只会是平等场虚幻的迷梦,用户想使的家装的光明时代并无会见出现。顶交互联网成家装行业的各级一个环都使有些标配时,互联网家装或许才刚刚开始。

介绍

咱们制定Objective-C编码规范的原由是咱们会以咱们的书写,教程以及初家工具确保之代码保持优雅与同等。即使我们出成百上千见仁见智的作者来完成不同之图书。

这边编码规范来或与君相底任何Objective-C编码规范不同,因为它最主要是以打印及web的易读性。

趁着互联网跟传统行业融合的日益深入,家装行业中的多环节同样产生矣互联网的因素。借助电商模式,用户家装过程当中要买的原料能够落实网上比价,减少了风家装过程中的标价不透明;借助实时在线的APP,用户在家装过程遭到可知进行24小时的监督,减少了民俗家装过程中的粗犷施工等行为;通过云端整合,用户在家装过程遭到能由此不同设计方案的结,减少设计无成立之起……尽管互联网就跟家装行业的各个一个等都落实了齐心协力,但是用户痛点依然存在的一个坏挺原因就是在于这些做只是浅尝辄止,并不曾起实质上改动这些流程,这即导致了“理想”很丰厚,“现实”很骨感。

背景

此小关于编码风格Apple官方文档,如果略微东西没有提及,可以当以下文档来搜寻更多细节:

  • The Objective-C Programming
    Language
  • Cocoa Fundamentals
    Guide
  • Coding Guidelines for
    Cocoa
  • iOS App Programming
    Guide

互联网改造家装行业无法,需要新力量

注释

当用注释时,注释应该为此来分解这段特殊代码为什么万一如此做。任何被用的诠释都须维持最新或给删。

相似还避免采用块注释,因为代码尽可能完成自解释,只有当断断续续或几执行代码时才需要注释。不等:这不使在转文档的笺注

<b id=”naming”></b>

于家装行业的各国一个环节,互联网都踏足其中。通过互联网以及家装行业之这些环节持续产生关联,找到它们中的结合点和创新点,然后再次对之行当开展兴利除弊。等及互联网的弹用老之常,再依新的技术手段对出现的初题材开展革命才能确实受家装行业之一个个环节开展改动,真正贯彻各个击破,共同改观。

空格

  • 缩进使用4只空格,确保于Xcode偏好设置来安。(raywenderlich.com以2个空格)
  • 措施大括号和另大括哀号(if/else/switch/while
    等.)总是在同样行语句打开但于新行中关闭。

应该:

if (user.isHappy) {
    //Do something
} else {
    //Do something else
}

不应该:

if (user.isHappy)
{
  //Do something
}
else {
  //Do something else
}
  • 以术之间应当出还只有发生一行,这样好在视觉及重复清楚和更便于组织。在方式外的空应该分别功能,但一般都抽离出来改成一个初章程。
  • 事先利用auto-synthesis。但要是产生必不可少,@synthesize
    @dynamic该当落实着每个都宣称新的一行。
  • 有道是避免为冒号对一头之法门来调用方法。因为有时方法签名可能有3独以上之冒号和冒号对旅会使代码更加易读。请不要这么做,尽管冒号对一头之方法包含代码块,因为Xcode的对准齐方式令它们难以辨认。

应该:

// blocks are easily readable
[UIView animateWithDuration:1.0 animations:^{
  // something
} completion:^(BOOL finished) {
  // something
}];

不应该:

// colon-aligning makes the block indentation hard to read
[UIView animateWithDuration:1.0
                 animations:^{
                     // something
                 }
                 completion:^(BOOL finished) {
                     // something
                 }];

<b id=”comments”></b>

平等场“互联网+家装”的创业大潮由此来临。

常量

常量是善再让利用和无需通过搜索和顶替就会快修改值。常量应该用static来声称如无是运用#define,除非显式地使用宏。

应该:

static NSString * const RWTAboutViewControllerCompanyName = @"RayWenderlich.com";

static CGFloat const RWTImageThumbnailHeight = 50.0;

不应该:

#define CompanyName @"RayWenderlich.com"

#define thumbnailHeight 2

<b id=”enumerated-types”></b>

基金造就的凡假象,而不真变革

Xcode工程

大体文件应当跟Xcode工程文件保持同来避免文件扩张。任何Xcode分组的缔造应该当文件系统的公文体现。代码不仅是因类型来分组,而且还可以依据功能来分组,这样代码更加清晰。

尽可能在target的Build Settings打开”Treat Warnings as
Errors,和启用以下additional
warnings。如果你要忽略特殊之警戒,使用
Clang’s pragma
feature。

【作者:孟永辉,资深撰稿人,专栏作者。从事互联网多年,长期关心行业研究。微信公众号:孟老狮】

命名

Apple命名规则尽可能坚持,特别是和这些相关的memory management
rules
(NARC)。

加上之,描述性的不二法门和变量命名是好之。

应该:

UIButton *settingsButton;

不应该:

UIButton *setBut;

老三单字符前缀应该时时用当类似与常量命名,但每当Core
Data的实业名受到答应给忽视。对于官的raywenderlich.com书、初家工具确保要学科,前缀’RWT’应该受使用。

常量应该利用驼峰式命名规则,所有的只是词首配母大写及增长和类名有关的前缀。

应该:

static NSTimeInterval const RWTTutorialViewControllerNavigationFadeAnimationDuration = 0.3;

不应该:

static NSTimeInterval const fadetime = 1.7;

性也是采用驼峰式,但首独词之首字母小写。对性能使用auto-synthesis,而非是手动编写@
synthesize语句,除非你出一个好之说辞。

应该:

@property (strong, nonatomic) NSString *descriptiveVariableName;

不应该:

id varnm;

<b id=”underscores”></b>

互联网家装却休是这般。其实现的独自是互联网以及家装行业的简单拼凑,对于风俗习惯家装行业的本质并不曾切实可行的改观,即使互联网已多次出现于风家装行业的顺序流程及环,但是这种出现还是只是流于形式,缺少针对民俗家装行业本质性的改造。

金子路线

当使用标准语句编码时,左手边的代码应该是”golden” 或
“happy”路径。也不怕是决不嵌套if说话,多独返回语句也是OK。

应该:

- (void)someMethod {
  if (![someOther boolValue]) {
    return;
  }

  //Do something important
}

不应该:

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

<b id=”error-handling”></b>

互联网已经同家装行业实现融合,但连无奏效

枚举类型

当使用enum时不时,推荐使用新的一定基本型标准,因为它们发生重复胜的色检查与代码补全。现在SDK有一个高大NS_ENUM()来协助和鼓励公用一定的核心类型。

例如:

typedef NS_ENUM(NSInteger, RWTLeftMenuTopItemType) {
  RWTLeftMenuTopItemMain,
  RWTLeftMenuTopItemShows,
  RWTLeftMenuTopItemSchedule
};

若也可显式地赋值(展示旧的k-style常量定义):

typedef NS_ENUM(NSInteger, RWTGlobalConstants) {
  RWTPinSizeMin = 1,
  RWTPinSizeMax = 5,
  RWTPinCountMin = 100,
  RWTPinCountMax = 500,
};

原来的k-style常量定义应该避免惟有编写Core Foundation C的代码。

不应该:

enum GlobalConstants {
  kMaxPinSize = 5,
  kMaxPinCount = 500,
};

<b id=”case-statements”></b>

基金的入被互联网家装企业注入了新的晋升与活力,让他俩有足的支持来放开好之概念,并持续取得足够多之用户关注。等及资本助推下之互联网家佯装浪潮褪去,用户最后选项的照样是能够真正被好之家装体验带来实际改变的企业,这就注定了互联网家装公司连无可知真正做到升级用户体验的使命。

语言

相应采取US英语.

应该:

UIColor *myColor = [UIColor whiteColor];

不应该:

UIColor *myColour = [UIColor whiteColor];

<b id=”code-organization”></b>

成千上万总人口见面以互联网家装的“概念”和“体验”之间的落差归结为传统行业没有与互联网实现融合,用户选择的上是“互联网”的,而当交诞生之时段也是“传统”的。其实,这并无是互联网没有跟家装行业真正落实融合所导致的。

raywenderlich.com Objective-C编码规范

眼看篇编码风格指南概括了raywenderlich.com的编码规范,可能小删减或改动。

纵观能够在互联网时代真正给用户体验带来精神变化的“互联网+”产品,其中一个非常重大之特点就是是其凭借互联网的手法被风行业带来了本质性的扭转,真正改变了人情行业,最后才为用户感受及这种实心的变更。微信、微博的出现正是改变了人人传统的联络和交流方式,通过实时互动、方便快捷的方的确给用户带来体验及转移,最终用户才真正感受及新的交际方式比传统的应酬方式更便于、快捷。

Init方法

Init方法应该按Apple生成代码模板的命名规则。返回路应该使instancetype而不是id

- (instancetype)init {
  self = [super init];
  if (self) {
    // ...
  }
  return self;
}

查关于instancetype的稿子Class Constructor
Methods

<b id=”class-constructor-methods”></b>

由此“互联网+”时代所谓的“突飞猛进”的提高下,互联网家装并无出现当初用户所愿意的可怜样子,深陷在装裱泥潭中的用户在挑装修店铺之上还是会择传统装饰店铺还是是选择所谓的“互联网家装”公司。而这些所谓的“互联网家装”公司像成为了具有装修店铺都见面有些标配,“换汤不换药”的家装企业并没于用户的家装体验带来任何变动。很多用户在风俗家装公司中还是会赶上的题材和弊病仍然在,时代呼唤真正会改变用户体验的“家装模式”,互联网家装显然不是。

变量

变量尽量为描述性的章程来定名。单个字符的变量命名该尽量避免,除了在for()循环。

星号表示变量是指针。例如, NSString *text 既不是 NSString* text
也不是 NSString * text,除了有的与众不同情况下常量。

个人变量
应该尽可能代替实例变量的运。尽管采取实例变量是平等种植中之主意,但又偏于被采用性能来保障代码一致性。

经利用’back’属性(_variable,变量名前来下划线)直接看实例变量应该尽量避免,除了以初始化方法(init,
initWithCoder:, 等…),dealloc
方法以及于定义之setters和getters。想打听有关什么当初始化方法与dealloc直接下Accessor方法的重多信息,查看这里

应该:

@interface RWTTutorial : NSObject

@property (strong, nonatomic) NSString *tutorialName;

@end

不应该:

@interface RWTTutorial : NSObject {
  NSString *tutorialName;
}

<b id=”property-attributes”></b>

俗家装之所以会出这般多之题目及弊病,其中一个不胜要紧之缘故就是在于用户体验及之欠缺,而导致用户体验相差的审由则是用户以全部家装过程中的精诚的感受。很多用户用通过互联网家装并从未收获想如果的结果,其中一个挺怪原因即在于他们实际并未感受及互联网家装描绘的实愿景,他们之装点经验并没有小改变。

法语句

规则语句主体为防备串应该采取大括如泣如诉包围,即使极语句主体能够不用大括声泪俱下编写(如,只用一行代码)。这些不当包括丰富第二履代码和梦想它变成if语句;还有,even
more dangerous
defect可能出在if语句里面一行代码被诠释了,然后下一行代码不知不觉地改为if语句的同等局部。除此之外,这种作风与另外标准化语句的品格保持一致,所以更便于看。

应该:

if (!error) {
  return success;
}

不应该:

if (!error)
  return success;

if (!error) return success;

<b id=”ternary-operator”></b>

就此,互联网的因素就出现在了家装行业不同之环节间已经充分说明:互联网已跟家装行业实现了齐心协力,但是这种同舟共济并无叫家装行业的这些环节带来改变,再添加家装行业涉及到之环比较多,最终导致用户真正感受及家装体验没多少改变。互联网与家装行业融合并无奏效,当互联网化同种植标配之后,针对家装行业的新一轱辘变革亟待出现。

仿佛构造方法

当类构造方法被采用时,它应有归路是instancetype而不是id。这样保证编译器正确地想结果类型。

@interface Airplane
+ (instancetype)airplaneWithType:(RWTAirplaneType)type;
@end

关于更多instancetype信息,请查看NSHipster.com

<b id=”cgrect-functions”></b>

互联网家装概念的无休止冒出、互联网和家装行业融合的浅薄、互联网改造家装行业之无法、资本的推最终造成了互联网家装的光明时代并无会见如期出现。等及互联网家佯装浪潮的褪去,它用会当前进历程当中碰到新的题材,如何解决这些新题材,将会见让互联网家装面临的新挑战,借助新技巧、新思路、新招数,一庙愈加触及本质的新家装革命终将来临。

村办属性

个体属性应该在类的贯彻文件被之好像扩展(匿名分类)中扬言,命名分类(比如RWTPrivateprivate)应该没以除非是扩大外类似。匿名分类应该经过利用<headerfile>+Private.h文件的命名规则暴露于测试。

例如:

@interface RWTDetailViewController ()

@property (strong, nonatomic) GADBannerView *googleAdView;
@property (strong, nonatomic) ADBannerView *iAdView;
@property (strong, nonatomic) UIWebView *adXWebView;

@end

<b id=”booleans”></b>

“概念牌”与“体验牌”之间存在正在必然之别,这种区别之有最终致了用户以涉了互联网家装时代后,并从未发觉自家之家装体验发生其他变更。特别是随着传统家装公司积极拥抱互联网之后,他们选择互联网家装公司跟选择传统家装企业曾休在其他的区分。同一庙轰轰烈烈的互联网家装革新大战同样淹没于揽互联网的浪潮中。

单例模式

单例对象应该用线程安全模式来创造共享实例。

+ (instancetype)sharedInstance {
  static id sharedInstance = nil;

  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    sharedInstance = [[self alloc] init];
  });

  return sharedInstance;
}

当下会防止possible and sometimes prolific
crashes.

<b id=”line-breaks”></b>

互联网家装之所以并从未达到预期的效果,其中一个怪要紧的来头即在家装行业牵扯到的本行多,流程比较复杂,而互联网家装则需要打这些行业当中的每一个环节切入,在促成各级一个环都出现改变的状下,最终才当真让周互联网家装行业拉动改变。

方法

当措施签名中,应该以艺术类型(-/+
符号)之后发一个空格。在点子各个段中间应当为发生一个空格(符合Apple的作风)。在参数之前应该包含一个具描述性的主要字来叙述参数。

“and”这个词之用法应该保留。它不应有用于多个参数来证明,就像initWithWidth:height以下是例子:

应该:

- (void)setExampleText:(NSString *)text image:(UIImage *)image;
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;
- (id)viewWithTag:(NSInteger)tag;
- (instancetype)initWithWidth:(CGFloat)width height:(CGFloat)height;

不应该:

-(void)setT:(NSString *)text i:(UIImage *)image;
- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;
- (id)taggedView:(NSInteger)tag;
- (instancetype)initWithWidth:(CGFloat)width andHeight:(CGFloat)height;
- (instancetype)initWith:(int)width and:(int)height;  // Never do this.

<b id=”variables”></b>

“互联网+”时代之所以能够当极其缺乏的时刻内便抱突飞猛进的上进,其中一个万分关键的因由纵然在资金以当下其间的基本点作用。财力的流入在一派促进了“互联网+”行业前行而,同样导致了重重“互联网+”行业之激进式发展,并致使了片假象的生。

于差不多总人口付出以及一个app时,如果每个人之Objective-C编码风格都不相同,这样不易于保持代码一致性难以Code
Review
。所以自己当网上查找到 The official raywenderlich.com Objective-C
style
guide即时首有关Objective-C编码风格的章,觉得可以看做之路之Objective-C的编码标准,所以尽管翻这首稿子。

互联网家装的愿景和用户之有血有肉感受之所以会遭受遇到这种困境,其中一个老大酷的原因即在互联网家装仅仅是一个定义而已,用户的体验也是一个纯真的感想,概念与具象里总是会生出那么些底异样。很多互联网家装企业为博用户的关切,赢得市场,主打的凡“概念牌”,而用户想要之倒是是会改变自己之家装体验,提升自身的家装品质,给家装行业拉动真正改变的“体验牌”。

  • 原稿作者 : raywenderlich.com
    Team
  • 译文出自 : raywenderlich.com
    Objective-C编码规范
  • 译者 : Sam
    Lau

文|孟永辉

CGRect函数

当访问CGRect里的x, y, width, 或
height时不时,应该下CGGeometry函数假如休是直通过结构体来访问。引用Apple的CGGeometry:

每当是参考文档中享有的函数,接受CGRect结构体作为输入,在测算其结果时隐式地法这些rectangles。因此,你的应用程序应该避免直接访问同改动保存于CGRect数据结构中之数额。相反,使用这些函数来操纵rectangles和获取她的特点。

应该:

CGRect frame = self.view.frame;

CGFloat x = CGRectGetMinX(frame);
CGFloat y = CGRectGetMinY(frame);
CGFloat width = CGRectGetWidth(frame);
CGFloat height = CGRectGetHeight(frame);
CGRect frame = CGRectMake(0.0, 0.0, width, height);

不应该:

CGRect frame = self.view.frame;

CGFloat x = frame.origin.x;
CGFloat y = frame.origin.y;
CGFloat width = frame.size.width;
CGFloat height = frame.size.height;
CGRect frame = (CGRect){ .origin = CGPointZero, .size = frame.size };

<b id=”golden-path”></b>

诸如此类大幅度的市场规模,如此多之便宜相关方造就了互联网在改造家装行业的时刻,并无会见像Uber、滴滴出现经常仅需要变更司机与乘客及时片在关系常那粗略,互联网在改造业主、设计师、施工企业、建材经销商等居多涉嫌经常显示有点力不从心。

旁Objective-C编码规范

万一我们的编码规范不吻合您的脾胃,可以查阅其他的编码规范:

  • Robots &
    Pencils
  • New York
    Times
  • Google
  • GitHub
  • Adium
  • Sam
    Soffes
  • CocoaDevCentral
  • Luke
    Redpath
  • Marcus
    Zarra

激进式的腾飞于咱们见识了资产以一个业提高过程当中起及之推的企图,同样给我们看到了血本的浅薄,一摆是因为本引发的互联网家装闹剧最终连无会见真持续升华下去,一个的确为用户体验带来的转移的崭新家装革命正研究。

Case语句

大括如泣如诉以case语句被连无是须的,除非编译器强制要求。当一个case语句包含多行代码时,大括号当加上。

switch (condition) {
  case 1:
    // ...
    break;
  case 2: {
    // ...
    // Multi-line example using braces
    break;
  }
  case 3:
    // ...
    break;
  default: 
    // ...
    break;
}

起好多软,当相同代码被多只cases使用时,一个fall-through应该为以。一个fall-through就是在case最后移除’break’语句,这样就能允许实施流程跳反至下一个case值。为了代码更加清晰,一个fall-through需要注释一下。

switch (condition) {
  case 1:
    // ** fall-through! **
  case 2:
    // code executed for values 1 and 2
    break;
  default: 
    // ...
    break;
}

当当switch使用枚举类型时,’default’是不需要的。例如:

RWTLeftMenuTopItemType menuType = RWTLeftMenuTopItemMain;

switch (menuType) {
  case RWTLeftMenuTopItemMain:
    // ...
    break;
  case RWTLeftMenuTopItemShows:
    // ...
    break;
  case RWTLeftMenuTopItemSchedule:
    // ...
    break;
}

<b id=”private-properties”></b>

多互联网家装企业以赢得眼球,获得关注,通常会将家装行业以及互联网行业尽可能多的关联在共,并准备借助互联网的招切实让家装行业带来本质性的反,殊不知家装行业真正用转移的凡用户体验,而非由所谓的概念牌。

点符号语法

接触语法是一律栽非常有利包访问方法调用的法。当您以点语法时,通过采取getter或setter方法,属性仍然为看还是涂改。想了解再多,阅读这里

接触语法应该总是叫用来访问与改属性,因为它如果代码更加简明。[]标记更偏于为用当任何例子。

应该:

NSInteger arrayCount = self.array.count;
view.backgroundColor = [UIColor orangeColor];
[UIApplication sharedApplication].delegate;

不应该:

NSInteger arrayCount = [self.array count];
[view setBackgroundColor:[UIColor orangeColor]];
[[UIApplication sharedApplication] delegate];

<b id=”literals”></b>

互联网家装真正用变更之凡体会,而休概念

下划线

当以性质时,实例变量应该使self.来做客与改动。这虽表示有属性将见面视觉效果不同,因为她前都发self.

而是有一个特例:在初始化方法里,实例变量(例如,_variableName)应该一直叫以来避免getters/setters潜在的副作用。

一部分变量不应该包含下划线。

<b id=”methods”></b>

换行符

换行符是一个生重大之主题,因为她的品格指南主要为打印及网上的可读性。

例如:

self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];

一行很丰富之代码应该分为两尽代码,下一行用半单空格隔开。

self.productsRequest = [[SKProductsRequest alloc] 
  initWithProductIdentifiers:productIdentifiers];

<b id=”xcode-project”></b>

代码组织

当函数分组和protocol/delegate实现着运用#pragma mark -来分类方法,要按以下一般结构:

#pragma mark - Lifecycle

- (instancetype)init {}
- (void)dealloc {}
- (void)viewDidLoad {}
- (void)viewWillAppear:(BOOL)animated {}
- (void)didReceiveMemoryWarning {}

#pragma mark - Custom Accessors

- (void)setCustomProperty:(id)value {}
- (id)customProperty {}

#pragma mark - IBActions

- (IBAction)submitData:(id)sender {}

#pragma mark - Public

- (void)publicMethod {}

#pragma mark - Private

- (void)privateMethod {}

#pragma mark - Protocol conformance
#pragma mark - UITextFieldDelegate
#pragma mark - UITableViewDataSource
#pragma mark - UITableViewDelegate

#pragma mark - NSCopying

- (id)copyWithZone:(NSZone *)zone {}

#pragma mark - NSObject

- (NSString *)description {}

<b id=”spacing”></b>

字面值

NSString, NSDictionary, NSArray, 和
NSNumber的字面值应该在创造这些看似的不可变实例时给使用。请特别注意nil价未克流传NSArrayNSDictionary字面值,因为这样会促成crash。

应该:

NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];
NSDictionary *productManagers = @{@"iPhone": @"Kate", @"iPad": @"Kamal", @"Mobile Web": @"Bill"};
NSNumber *shouldUseLiterals = @YES;
NSNumber *buildingStreetNumber = @10018;

不应该:

NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil];
NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil];
NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES];
NSNumber *buildingStreetNumber = [NSNumber numberWithInteger:10018];

<b id=”constants”></b>

性能特性

享有属性特性应该显式地排下,有助于新手阅读代码。属性特性的逐条应该是storage、atomicity,与在Interface
Builder连接UI元素时自动生成代码一致。

应该:

@property (weak, nonatomic) IBOutlet UIView *containerView;
@property (strong, nonatomic) NSString *tutorialName;

不应该:

@property (nonatomic, weak) IBOutlet UIView *containerView;
@property (nonatomic) NSString *tutorialName;

NSString应该运用copy 而不是 strong的习性特性。

怎么?即使你声明一个NSString的性能,有人或许传播一个NSMutableString的实例,然后在您没有在意的情事下修改它。

应该:

@property (copy, nonatomic) NSString *tutorialName;

不应该:

@property (strong, nonatomic) NSString *tutorialName;

<b id=”dot-notation-syntax”></b>

关于作者

当下编码规范之创建是由于众多来自raywenderlich.com团队成员以Nicholas
Waynik的领下共同完成的。团队成员有:Soheil Moayedi
Azarpour,
Ricardo Rendon
Cepeda,
Tony Dahbura,
Colin
Eberhardt,
Matt
Galloway,
Greg Heo,
Matthijs
Hollemans,
Christopher
LaPollo,
Saul Mora,
Andy Pereira,
Mic Pringle,
Pietro Rea,
Cesare Rocchi,
Marin Todorov,
Nicholas
Waynik和Ray
Wenderlich

俺们为非常感谢New York
Times
和Robots &
Pencils’Objective-C编码规范的作者。这半只编码规范也依照指南的创始提供好好之起点。