股票场内基金交易,没时间盯盘?
本文可以看做是我对《Effective Objective-C 2.0》一书做的学习笔记。延续自 Objective-C规范代码编写建议一。
使用清晰协调的命名方式
与许多语言不同的是 Objective-C 采用语句式命名。这也许会让新手觉得很繁琐,不过苹果的本意应该是希望直接通过名字明白方法和变量名的用法,而非需要频繁的回头查看注释或原型。
-
Objective-C 使用驼峰命名法——首个字母以小写开头,之后每个单词首字母以大写开头。如果是为类名命名,首个字母也应为大写。
-
避免类似 btn(button)、img(image)的自制简称,使用全称。当然,还是可以使用一些约定俗成的简称:
alloc:分配;
alt:轮流,交替;
app:应用程序;
calc:计算;
dealloc:销毁、析构;
func:函数、方法;
horiz:水平的;
info:信息;
init:初始化;
max:最大的;
min:最小的;
msg:消息;
nib:Interface Builder;
rect:矩形;
temp:暂时的;
vert:垂直的; -
对于拥有返回值的方法,首个单词应为描述该参数类型的名词,比如 UIButton 的“buttonWithType:”类方法。必要的话还可以在前面加上修饰词,比如单例模式下提供的全局化类方法通常会加上 shared、default、standard 等字眼;
-
方法中的参数也应用名词加以描述,如 UIButton 的“setTitle: forState:”方法;
-
不要吝惜使用 in、at、with 等介词或 will、should、did 等助词,我们需要通过名字准确传达出方法含义;
-
声明一个 BOOL 属性时在 property 元素中增添 is 前缀的 getter 方法;
12@property (nonatomic, getter=isEnabled) BOOL enabled; -
自定义的类名尽量与其超类乃至本框架中的风格一致。比如继承自 UITableView 的子类应以“TableView”或“VIew”作为结尾单词。同理,自定义的协议名字应为委托方的类名加上 Delegate 一词。
善用分类功能
随着开发的深入,一个类中通常会填充越来越多的方法。面对实现文件中日益庞大的代码,使用 #pragma mark 进行标注也开始显得力不从心。此时利用 Objective-C 的分类机制,将不同的方法代码按需求划入数个文件中,对开发和调试都有好处。
比如现在有一个 TIMPerson 类的头文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@interface TIMPerson : NSObject /* properties */ - (instancetype)initMethods; - (void)studyMethods1; - (void)studyMethods2; - (void)studyMethods3; - (void)workMethods1; - (void)workMethods2; - (void)workMethods3; - (void)playMethods1; - (void)playMethods2; - (void)playMethods3; @end |
我们利用分类功能进行改写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
@interface TIMPerson : NSObject /* properties */ - (instancetype)initMethods; @end @interface TIMPerson : (Study) - (void)studyMethods1; - (void)studyMethods2; - (void)studyMethods3; @end @interface TIMPerson : (Work) - (void)workMethods1; - (void)workMethods2; - (void)workMethods3; @end @interface TIMPerson : (Play) - (void)playMethods1; - (void)playMethods2; - (void)playMethods3; @end |
更进一步将分类作为文件分离出来:
1 2 3 4 |
TIMPerson+Study.h(m) TIMPerson+Work.h(m) TIMPerson+Play.h(m) |
这样就把一个类分为多个功能小块,易于管理。稍显麻烦的也许就是需要多引用一个文件了:)
分类的使用注意
相对来说,对分类机制更常见的利用是向苹果那些不公开源码的框架类中添加方法新增自定义功能。这个特性非常强大,但也忽视一些细节的话容易产生严重的问题和隐患。
为分类名和方法加上前缀
这个很好理解,因为会产生因为重名而覆盖的问题:也许会覆盖原有类中的方法;也可能会和其它分类重名而依据运行顺序相互覆盖。
解决方法和类名的定义一样,用统一的前缀标识(个人、组织或项目名简称)加以区分。比如需要给 UIIMage 添加分类:
1 2 3 4 |
@interface UIImage (TIM_Category) - (void) tim_imageMethod; @end |
避免在分类中声明属性
除了 class-extension 分类外,其它分类是无法向类中新增实例变量的,因此,它们无法将属性实现所需的实例变量合成出来。
不过,有时只读属性还是可以在分类中使用的。比如我们给 NSArray 添加分类并声明一个只读属性:
1 2 |
@property(assign, nonatomic, readonly)NSInteger largestIndex; |
实现 getter 方法:
1 2 3 4 |
- (NSInteger)largestIndex{ return self.count - 1; } |
这里 largestIndex 属性是可以正常使用的,因为它不需要实例变量来实现。这种方式和直接声明一个 – (NSInteger)largestIndex 方法是一样的,通常我也更建议写成方法而非属性。分类机制应被理解为一种手段,目的不在于在于封装数据,而是扩展功能。
想获得去掉 5 元限制的证券账户吗?

如果您想去掉最低交易佣金 5 元限制,使用微信扫描左边小程序二维码,访问微信小程序「优财助手」,点击底部菜单「福利」,阅读文章「通过优财开证券账户无最低交易佣金 5 元限制」,按照文章步骤操作即可获得免 5 元证券账户,股票基金交易手续费率万 2.5。
请注意,一定要按照文章描述严格操作,如错误开户是无法获得免 5 元证券账户的。