tips1 : 先熟悉OC的一些语言特性
虽然现在swift语言已经出来了,但是就现在的大背景来说,OC还是需要一定的时间才会被swift取代(或者根本取代不了啦)所以了解OC的基本语言特性,掌握OC的语言精髓是学号ios开发的必修课哈,在这里不得不提到OC的动态特性,消息机制里面,接收到消息以后到底执行那段代码呢??嘿嘿,这个就要看具体的运行环境而不是编译器了,这一点就和那些静态语言就不同了。。(PS:运行时很重要。。)
tips2:在类的定义头文件中少引入其他头文件
因为引入头文件会把一些不必要的被引入的头文件里面的东西编译一次,会增加编译时间的嘞。。而且很可能造成死循环哦(相互引用的时候),所以不需要的时候在.h中使用@class(向前引用)来代替#import吧。
tips3:字面量语法。
@1,@2.2,@[@2,@3],@{@"age":@18 }等等,看多简明扼要,看看。。
tips4:少用#define
#define ANIMATION_DURATION 0.3
使用
static const NStimeInterval KANimation = 0.3;
static:仅仅内部编译单元可见(.m文件),如不加的话,,外部可见哦,因为系统自动加外部符号
const : 不可修改
ps:extern用法(外部可见的哟,总感觉和class有点像,告诉了编译器这个变量直接可以使用,反正就是有的,也不管这个变量到底是什么鬼):
.h里面: extern NSString * const notificationName;
.m里面: NSString * const notificationName = @“notificationName”;
来代替吧
这样类型也定了,保险一些,还有就是注意那个K,这是一种标识,很有用的,不过如果外部可见的话,还是加一个类名的前缀吧。。这样见名知意也不会出错哇,
tips5:使用枚举表示状态,选项,状态码
tips6:init 和 dealloc 内避免使用访问器,准确来说是不要在对象`创建`和`销毁`的时候向自己发送消息,因为在这个时候,对象处于中间状态,详见苹果文档 Practical Memory Management : “不要在初始化方法和dealloc中调用访问方法”
```
正确:
- (id)init {
self = [super init];
if (self) {
bar_ = [[NSMutableString alloc] init]; // good
}
return self;
}
- (void)dealloc {
[bar_ release]; // good
[super dealloc];
}
错误:
- (id)init {
self = [super init];
if (self) {
self.bar = [NSMutableString string]; // avoid
}
return self;
}
- (void)dealloc {
self.bar = nil; // avoid
[super dealloc];
}
```
tip7 : 接受 NSString 作为参数的 setter,应该总是 copy 传入的字符串。
永远不要仅仅 retain 一个字符串。因为调用者很可能在你不知情的情况下修改了字符串。不要假定别人不会修改,你接受的对象是一个 NSString 对象而不是 NSMutableString 对象。至于retain 和 copy 相对于NSString 和NSMutableString的区别,,
- (void)setFoo:(NSString *)aFoo {
[foo_ autorelease];
foo_ = [aFoo copy];
}
-------
tips8:劳逸结合,睡一觉明天晚上继续吧,又要早起。。
---------------------------------------------------------------------
注:这是我的笔记,来源是Effectivie objective- c。然后结合一些我自己在实际项目中总结出来的东西。