Objective-C编码规范[译]

iOS功能
iOS 如何过反到系统装置里之指定子功能界面
http://blog.csdn.net/jingfa1993/article/details/70174524
iOS开发中UILocalNotification本地通知落实简单的唤起作用
http://www.cnblogs.com/jingxin1992/p/6402539.html
iOS开发网络篇的文件下载、大文件下载、断点下载
http://www.jianshu.com/p/f65e32012f07
iOS 【自定义 抛来异常】
http://blog.csdn.net/felicity294250051/article/details/51229358
ios开发 之 简体和繁体中文转换
http://blog.csdn.net/zeng\_zhiming/article/details/68925881
越详细!iOS 并作编程的 Operation Queues
http://www.cocoachina.com/ios/20150807/12911.html
iOS之动力表现之重力作用跟碰撞效果
http://www.jianshu.com/p/30c52ec69fb3
iOS多线程开发-线程安全
http://www.jianshu.com/p/e7e44dfb1d2b
IOS音频和看到频
http://www.jianshu.com/p/9a570f49d4b1
iOS开发实用技巧—Objective-C中之各种遍历(迭代)方式
http://www.cnblogs.com/wendingding/p/5251937.html

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

UI
UIApplication
http://www.jianshu.com/p/597b9d108f39
UIKit的外观属性和艺术汇总
http://www.jianshu.com/p/3a4353339822
uitableview刷新行 列表会向上移动
http://www.cocoachina.com/bbs/read.php?tid-248668.html
由用Masonry布局不可知就赢得到frame想到的有的题材
http://www.cocoachina.com/ios/20170928/20671.html
iOS 自定义UIAlertController的字体、颜色、大小
http://www.jianshu.com/p/a7bd1f9d11f7
iPhone UITextField 属性
http://blog.csdn.net/xianpengliu/article/details/6586891
UISwitch详解
http://www.jianshu.com/p/e6ef6eb04c6a
ios UItableViewCell detailTextLabel 无法展示的解决办法
http://www.jianshu.com/p/0914faf6022c
resizableImageWithCapInsets:方法的探析
http://www.jianshu.com/p/a577023677c1
iOS中文行间距宽文本高度及展示那些坑
http://www.jianshu.com/p/a7f55e456539
UICollectionViewLayout布局详解
http://www.jianshu.com/p/45ff718090a8
CALayer这些牛逼的子类你造吗_补全篇
http://www.cocoachina.com/ios/20170714/19867.html
各种UI 偏移问题大集合
http://www.jianshu.com/p/8f0a22cbc4b2
navigationBar对视图布局的震慑,今天毕竟为明白了
http://www.zhimengzhe.com/IOSkaifa/254728.html
UITableViewWrapperView 的frame位置和tableView不同
http://blog.csdn.net/a1530117042/article/details/67632592
UITableView出现向上/下转移64底问题 解析
http://blog.csdn.net/zhz459880251/article/details/49470461
UITableViewWrapperView 的frame位置和tableView不同
http://www.jianshu.com/p/e08613a0f0f7
iOS 更改状态栏、导航栏颜色之几乎栽方法
http://www.jianshu.com/p/63f758796438
iOS 设置Label的行间距
http://blog.csdn.net/u013892686/article/details/51324164
ios textfield 修改 placeholder color 颜色
http://blog.csdn.net/iroycn/article/details/49299859
iOS 改变UIButton按钮的内容图片和内容文本的对立位置与内边距
http://www.jianshu.com/p/e8e20e232305
iOS一个简易的安圆角不引起性能问题之分类
http://www.jianshu.com/p/ddad9e336162
iOS-UIView坐标系转换-convertRect toview
http://blog.csdn.net/qxuewei/article/details/51145448
自定义UISearchBar背景、边框、左侧图标、删除图标、取消按钮
http://blog.csdn.net/tammy\_min/article/details/47918477

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

Swift
Swift
https://swift.org
swift <Photos.framework >
http://www.jianshu.com/p/c25405582f9f
Swift中之Protocol知道这些虽够用了
http://www.jianshu.com/p/ee92fcbb3d21
Swift3.0朝圣的路-使用Runtime在分类Extension中上加属性
http://www.jianshu.com/p/53abf1703905
[属于swift开发的pch文件]
http://www.jianshu.com/p/5ab77b7d6b4c
Range -Swift(译)
http://www.jianshu.com/p/b804f0090a74
Swift文件管理必知的一些操作
http://www.jianshu.com/p/316464cb028a
Swift字符串常用操作总结
http://www.jianshu.com/p/52e7580166ff
Swift – 文件,文件夹操作非常全
http://www.hangge.com/blog/cache/detail\_527.html
Swift数据存储(一)
http://www.jianshu.com/p/efd358d53ffd
[Swift] iOS中的目录路径和获得方式
http://www.jianshu.com/p/3458b29c11e2
Swift使用Date的一些心得
http://www.jianshu.com/p/09ac9329cf8e
Swift 3 关于Date的一部分操作
http://www.jianshu.com/p/a6275cc54e04
Swift3.0–错误/异常的正确处理方式
http://www.jianshu.com/p/911c7a2805d5
04Swift基本语法(可选和强制解包)
http://www.jianshu.com/p/e51f35b0b08d
Swift – 截屏
http://www.jianshu.com/p/52ddc85da20c
Swift-05-存储属性与计算属性
http://www.jianshu.com/p/07b7cb4ef603
Swift3.0中GCD定时器的运
http://blog.csdn.net/june\_email/article/details/53836628
Swift3.0 Timer
http://www.jianshu.com/p/300bd5ad4aae
Swift 报错 Type ‘xx’ does not conform to protocol
‘UITableViewDataSource’
http://www.jianshu.com/p/8fc0ca4cfa85

当差不多人口出与一个app时,如果每个人之Objective-C编码风格都不相同,这样不易于保持代码一致性难以Code
Review
。所以自己当网上搜索到 The official raywenderlich.com Objective-C
style
guide立马篇有关Objective-C编码风格的篇章,觉得好看做之路之Objective-C的编码标准,所以便翻这篇稿子。

Foundation
iOS中性能与成员变量的别
http://www.cnblogs.com/ygm900/p/3660364.html
OC中的extern,static,const
http://www.jianshu.com/p/9fd82a6d016b
iOS系统库头文件中NS_AVAILABLE相关
http://www.jianshu.com/p/55adac99377b
iOS 去除字符串中之特殊字符总结
http://www.jianshu.com/p/5a53f6793ef1
iOS字符串比较(区分和匪分轻重缓急写于)
http://blog.csdn.net/sevenquan/article/details/50602418
NSScanner使用方式
http://www.jianshu.com/p/82fedceb902d
ObjC中_cmd的用法
http://www.jianshu.com/p/fdb1bc445266
IOS开发的——objectForKey与valueForKey在NSDictionary中之别
http://blog.csdn.net/pjk1129/article/details/7572212
iOS之对象复制
http://www.cocoachina.com/ios/20170314/18865.html
Objective-C新特性__nonnull和__nullable
http://blog.sina.com.cn/s/blog\_5c91824f0102vxpd.html
@weakify, @strongify
http://www.jianshu.com/p/3d6c4416db5e

raywenderlich.com Objective-C编码规范

即时首编码风格指南概括了raywenderlich.com的编码规范,可能稍删减或涂改。

iOS适配
记录对iOS10的适配工作
http://www.jianshu.com/p/90680a4f5143
iOS11、iPhone X、Xcode9 适配指南
http://www.cocoachina.com/ios/20171011/20737.html
iOS字体大小适配的几栽方法
http://www.jianshu.com/p/7a6106f952d3

介绍

咱俩制订Objective-C编码规范之原委是咱能当我们的开,教程以及初家工具确保的代码保持优雅与同样。即使我们发出不少不比之撰稿人来就不同的书。

这里编码规范来或同你看来的外Objective-C编码规范不同,因为它们根本是为着打印和web的易读性。

Git
git-flow 的干活流程
https://github.com/nvie/gitflow
Git-Book
https://git-scm.com/book/zh/v2
git 终端应用办法
http://www.jianshu.com/p/1232f048f98a
Git,Github和Gitlab简介和主导采用
http://www.jianshu.com/p/8d497989f704
[转载]安化解failed to push some refs to git
http://www.jianshu.com/p/835e0a48c825
拿品种Demo上传到Github上的操作步骤
http://blog.csdn.net/hbblzjy/article/details/52301633

关于作者

即时编码规范之创导是由于多源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编码规范之撰稿人。这片独编码规范也遵循指南的创提供特别好的起点。

CocoaPods
cocoapods:常见错误总结
http://blog.csdn.net/wangyanchang21/article/details/51437934
CocoaPods 版本管理冲突 解决
http://blog.csdn.net/shaobo8910/article/details/46648433
Cocoapods常用命令及介绍
http://www.jianshu.com/p/2928a32afecc

背景

这里小关于编码风格Apple官方文档,如果略微东西从来不提及,可以于偏下文档来探寻更多细节:

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

Runtime
OC刨根问底】-Runtime简单多少暴理解
http://www.jianshu.com/p/f900de4a1495
iOS-runtime的关联
http://www.jianshu.com/p/19b5e4bc1718
运行时机制修改UIAlertController文字对齐方式
http://blog.csdn.net/lianyinkui/article/details/51292316
iOS程序启动暨运作】- RunLoop个人小结
http://www.jianshu.com/p/37ab0397fec7

目录

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

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

CoreAnimation
iOS 动画作用:Core Animation & Facebook
http://www.cocoachina.com/ios/20151223/14739.html
iOS自定义转场动画
http://www.jianshu.com/p/45434f73019e
CATransaction 隐式动画的关
http://www.jianshu.com/p/593d0758fa0f
UIViewAnimationOptions类型
http://blog.sina.com.cn/s/blog\_8d1bc23f0102vqs1.html
快决定函数(CAMediaTimingFunction)
http://www.jianshu.com/p/a4d774315613

语言

应使用US英语.

应该:

UIColor *myColor = [UIColor whiteColor];

不应该:

UIColor *myColour = [UIColor whiteColor];

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

文件管理
iOS之NSFilemanager文件管理(沙盒)
http://www.jianshu.com/p/a08cf375043a

代码组织

每当函数分组和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>

内存管理
ARC内存管理中易于忽视的问题
http://www.cocoachina.com/ios/20170727/20038.html
ios开发之切换RootViewController时注意的内存泄漏
http://www.jianshu.com/p/ac4aebdc74d4
NSString的内存管理问题
http://www.cnblogs.com/hellocby/archive/2012/08/23/2652201.html
ARC下查看对象的援计数
http://blog.csdn.net/abc649395594/article/details/46670915

空格

  • 缩进使用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>

设计模式
Key-Value Observing机制
http://www.cnblogs.com/pengyingh/articles/2383629.html
同样差简单的ReactiveCocoa+MVVM的履行
http://www.jianshu.com/p/7f8690f2acda
浅谈 MVC、MVP 和 MVVM 架构模式
http://www.cocoachina.com/ios/20170717/19884.html

注释

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

相似还避用块注释,因为代码尽可能完成自解释,只有当断断续续或几乎尽代码时才要注释。差:这不使用在变更文档的笺注

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

dispatch
使用dispatch_group来开展线程同步
http://www.jianshu.com/p/228403206664
通过GCD中的dispatch_barrier_(a)sync加强对sync中所谓等待的明
http://blog.csdn.net/klabcxy36897/article/details/52279418

命名

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>

PhotoKit
iOS8 Photos Framework
http://www.jianshu.com/p/8cf7593cc44d
PHFetchResult
http://www.jianshu.com/p/c5fe835bb0fb

下划线

当用性能时,实例变量应该使用self.来做客同反。这虽意味着所有属性将见面视觉效果不同,因为她前都起self.

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

有变量不应当包含下划线。

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

文化技能
iOS 保持界面流畅的艺
https://blog.ibireme.com/2015/11/12/smooth\_user\_interfaces\_for\_ios/
有关iOS一些大面积知识点解析
http://www.jianshu.com/p/70988e036096
于Object-C中读排序算法
http://www.cocoachina.com/ios/20170803/20117.html
iOS 处理图片的片段有点 Tip
https://blog.ibireme.com/2015/11/02/ios\_image\_tips/
《Effective Objective-C 2.0:编写高质量iOS与OS
X代码的52单有效办法》阅读笔记
http://www.cocoachina.com/ios/20170719/19927.html
iOS实录15:浅谈iOS Crash(二)
http://www.cocoachina.com/ios/20170713/19849.html
从小到大iOS开发经验总结(二)
http://www.cocoachina.com/ios/20170710/19791.html
浅析XCode编译过程
http://www.jianshu.com/p/b027a8c4c3a3
带动您一步步构建iOS路由于
http://www.jianshu.com/p/3a902f274a3d
iOS开发技术
http://www.jianshu.com/c/19dbe28002a3
iOS Developer
http://www.jianshu.com/c/3233d1a249ca
【详解】苹果加强审查力度,被驳回原因终逃不了这些!
http://www.cocoachina.com/appstore/20171025/20902.html
[iOS]同样不成立竿见影的启航时优化
http://www.cocoachina.com/ios/20170816/20267.html
iOS中大多语言本地化流程的优化
http://www.cocoachina.com/ios/20170809/20190.html
WWDC 2017 – Vision 图像识别框架的用
http://www.cocoachina.com/ios/20170801/20061.html
iOS自带悬浮窗调试工具使用详解
http://www.cocoachina.com/ios/20170712/19817.html
iOS CommonCrypto 对如加密 AES ecb,cbc
http://www.cnblogs.com/cocoajin/p/6150203.html
iOS警告收录与科学高效的消除方法
https://my.oschina.net/iq19900204/blog/518044
iOS开发网络篇—搭建本地服务器
http://www.cnblogs.com/wendingding/p/3813436.html
iOS开发之耗电量分析
https://www.tuicool.com/articles/6bIRJvF
全屏右滑返回的有从有情
http://www.jianshu.com/p/b232f4253b8f
YYKit作者博客
https://blog.ibireme.com/author/ibireme/

方法

当点子签名中,应该在章程类型(-/+
符号)之后发生一个空格。在法各个段之间应当为发生一个空格(符合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>

第三方
iOS开发笔记 – 界面调试神器Reveal
http://blog.csdn.net/jackfrued/article/details/50934092
iOS-ReactiveCocoa使用之RACCommand
http://www.jianshu.com/p/1a0185782d8a
JSBadgeView的为主采用
http://www.jianshu.com/p/ea7dba529732
iOS 即时视频以及拉(基于环信)
http://www.jianshu.com/p/cd6724e864b1
据悉XMPP协议的手机多方多端即时通讯方案
http://www.cnblogs.com/luxiaofeng54/archive/2011/03/14/1984026.html
iOS微信支付开发
http://www.cocoachina.com/bbs/3g/read.php?tid=303132
Charles安装破解和以
http://www.jianshu.com/p/55a8c84e0f24
使用 Charles 获取 https 的数据
http://www.jianshu.com/p/235bc6c3ca77
FDFullScreenPopGesture学习笔记
http://www.jianshu.com/p/30c5e6ee9069
DZNEmptyDataSet的使用
http://shaojunxiao.com/2016/02/28/DZNEmptyDataSet的使用/
CocoaLumberjack使用
http://www.jianshu.com/p/a571b69700a3

变量

变量尽量以描述性的方法来命名。单个字符的变量命名该尽量避免,除了以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>

数据库
程序员老鸟写sql语句之经历的谈话
http://blog.csdn.net/liweibin\_/article/details/8928997
sql之left join、right join、inner join的区别
http://www.cnblogs.com/pcjim/articles/799302.html
iOS数据存储的SQL语句的基本以
http://www.jianshu.com/p/7a7767e6c9ac

特性特性

抱有属性特性应该显式地排下,有助于新手阅读代码。属性特性的次第应该是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>

面试相关
BAHome:iOS 面试题收藏录
http://www.cocoachina.com/ios/20171027/20944.html
《招聘一个赖谱的 iOS》—参考答案(一)
http://www.jianshu.com/p/a9e4c8914e67
iOS:腾讯一面
https://mp.weixin.qq.com/s?\_\_biz=MzUyNDM5ODI3OQ==&mid=2247483768&idx=1&sn=9e446324ffc993f84c76997936ba23f5&chksm=fa2cbad0cd5b33c6fafedda91c279eb4a5431a0dafc87161953862ece4952c8f1c0312c68ffd&mpshare=1&scene=23&srcid=1109YKC3lrYF5a3jUsLkItxU\#rd
面试时怎么优雅的座谈OC
http://www.jianshu.com/p/7f3c78dcd3b5
面试时怎样优雅的讨论HTTP/1.0/1.1/2.0
http://www.jianshu.com/p/7f3c78dcd3b5
面试时怎样优雅的议论源码
http://www.jianshu.com/p/f14b17467dd9
面试时如何优雅的议论Hybrid App
http://www.jianshu.com/p/f14b17467dd9

点符号语法

接触语法是同等种植怪便宜包访问方法调用的措施。当你使用点语法时,通过动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>

有左
iOS读取文件Bundle pathForResource方法返回nil问题
http://www.jianshu.com/p/c5b7b689752e
关于iOS应用跳转“prefs:root”无效的题材(包括iOS10)
http://www.jianshu.com/p/5b4d53d66ae9
iOS真机调试问题-App installation failed
http://www.jianshu.com/p/99c441070b22

字面值

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>

其他
sublime自动缩进排版
http://blog.csdn.net/youngdou/article/details/46460423
Mac 终端命令大全
http://www.jianshu.com/p/3291de46f3ff

常量

常量是爱再让采取以及无需通过寻找和替代就能便捷修改值。常量应该用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>

枚举类型

当使用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>

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>

民用属性

私家属性应该在类的贯彻公文中之近乎扩展(匿名分类)中宣称,命名分类(比如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>

布尔值

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语句;还有,even
more dangerous
defect或出在if语句里面一行代码被诠释了,然后下一行代码不知不觉地成if语句的同局部。除此之外,这种风格与另外条件语句的品格保持一致,所以更便于看。

应该:

if (!error) {
  return success;
}

不应该:

if (!error)
  return success;

if (!error) return success;

<b id=”ternary-operator”></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>

Init方法

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

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

查关于instancetype的稿子Class Constructor
Methods

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

恍如构造方法

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

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

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

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

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>

黄金路线

当用规则语句编码时,左手边的代码应该是”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>

错误处理

当方法通过引用来回到一个破绽百出参数,判断返回值如果未是错变量。

应该:

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>

单例模式

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

+ (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>

换行符

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

例如:

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

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

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

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

Xcode工程

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

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

另外Objective-C编码规范

如我们的编码规范不入您的气味,可以查其他的编码规范:

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图