引言
编码风格Apple官方文档:
The Objective-C Programming Language :
developer.apple.com/library/mac…
Cocoa Fundamentals Guide :
developer.apple.com/legacy/libr…
Coding Guidelines for Cocoa :
developer.apple.com/library/mac…
iOS App Programming Guide:
developer.apple.com/library/ios…
苹果此前宣布,从2022年1月底开始,允许创建账号的App还必须允许用户从App中删除账号。苹果表示,它正在给App发布者和开发者更多的时间,因为它认识到提供此功能的复杂性。
苹果要求App必须内置账号删除功能,但可以宽限一段时间。苹果公司推迟了一些原定于1月31日生效的规则的执行,即App必须提供内置的账户删除功能。
I、Objective-C编码规范
1.1 代码组织
在函数分组和protocol/delegate实现中使用#pragma mark -来分类方法
1.2 注释
当需要注释时,注释应该用来解释这段特殊代码为什么要这样做。
任何被使用的注释都必须保持最新或被删除。
1.3 命名
-
方法和变量命名
: Apple命名规则尽可能坚持,长的,描述性的方法和变量命名
UIButton *settingsButton;
-
常量
:应该使用驼峰式命名规则,所有的单词首字母大写和加上与类名有关的前缀。
static NSTimeInterval const RWTTutorialViewControllerNavigationFadeAnimationDuration = 0.3;
// 使用字符串常量来代替宏的使用
//定义const 全局常量 ,保证只在一处定义,多处进行引用
////#define HWClientId @""//宏会在编译时,将所有引用宏变量的地方,进行值的替换,造成很多相同的临时字面量,浪费内存
//NSString * const HWClientId = @"";// 全局的const常量代替宏常量,节省内存空间。内存只有一份
-
属性
:属性也是使用驼峰式,但首单词的首字母小写。
对属性使用auto-synthesis( 自动合成),而不是手动编写@synthesize语句,除非特殊需要
@property (strong, nonatomic) NSString *descriptiveVariableName;
- 局部变量不应该包含下划线。(为了和实例变量进行区别)
- 点语法应该总是被用来访问和修改属性
self.isfooterRereshing = NO;
- 所有属性特性应该显式地列出来,有助于阅读代码。
属性特性的顺序是storage、atomicity,与Interface Builder连接UI元素时自动生成代码一致。
@interface KNTutorial : NSObject
@property (strong, nonatomic) NSString *tutorialName;//所有属性特性应该显式地列出来,有助于阅读代码。属性特性的顺序是storage、atomicity,与Interface Builder连接UI元素时自动生成代码一致。
@end
- NSString应该使用copy而不是strong的属性特性。
因为即使在你你声明一个NSString的属性的时候,有人可能传入一个NSMutableString的实例,然后在你没有注意的情况下修改它。
1.4 不允许直接修改对象的结构体属性的成员;
OC中,不予许直接修改“对象”(iconButton)的“结构体属性”(frame)的“成员”(origin);但是允许修改结构体属性的成员
- (void)setY:(CGFloat)y{
CGRect frame = self.frame;
frame.origin.y = y;//允许修改结构体属性的成员
self.frame = frame;
}
1.5 使用CGGeometry操作frame
1.6 布尔值
- Objective-C使用YES和NO。
因为true和false应该只在CoreFoundation,C或C++代码使用。
- 既然nil解析成NO,所以没有必要在条件语句比较。
不要拿某样东西直接与YES比较,因为YES被定义为1
II 性能相关
2.1 全局的const常量代替宏常量,节省内存空间。
- 使用字符串常量来代替宏的使用
1、定义const 全局常量 ,保证只在一处定义,多处进行引用 2、全局的const常量代替宏常量,节省内存空间。内存只有一份
//宏会在编译时,将所有引用宏变量的地方,进行值的替换,造成很多相同的临时字面量,浪费内存
NSString * const KNClientId = @"";// 全局的const常量代替宏常量,节省内存空间。内存只有一份
2.2 深入理解MRC和ARC内存管理机制
- 需要释放的资源:
imageCache、queue、operations、view、通知监听者的移除、销毁soundID
- 释放的方法:
dealloc 、applicationDidReceiveMemoryWarning、didReceiveMemoryWarning
- 凡是函数名中带有
create、copy、new、retain
等字眼的,都应该在不需要它的时候进行release。 GCD的数据类型在ARC环境下不需要进行release;而CF的数据类型在ARC、MRC环境下都需要做release的。
2.2
III 常见问题
3.1 Cocoa naming
Property follows Cocoa naming convention for returning 'owned' objects
不能以
new
关键字开头定义属性
正确的属性定义
由于篇幅原因,更多内容请关注 #小程序:iOS逆向,只为你呈现有价值的信息,专注于移动端技术研究领域;更多服务和咨询请关注#公众号:iOS逆向。