Object-c 一些代码规范

点引用是地道的Objective-C 2.0的风格。它被使用于简单的属性set、get操作,但对象的其它行为不 应该使用它。


Setters中对NSString进行copy 永远不要仅仅retain一个字符串。这避免了调用者在你不知道的情况下对字符串作出了修改。不要作出那样的假设:你接受的对象是一个NSString对象而不是NSMutableString对象。

- (void)setFoo:(NSString *)aFoo { [foo_ autorelease];
foo_ = [aFoo copy];

}总结:接受NSString作为参数的setter,应该copy它所接受的字符串。

这从逻辑上遵守了NSString的setter必须使用copy而不是retain。


实现委托模式的类应该:

拥有一个名为delegate_的成员变量来引用委托。 因此,访问器方法应该名为delegate和setDelegate:。 delegate_对象不应该被retained。

不要直接比较BOOL变量与YES/NO。不仅仅这影响可读性,结果可能与你想的不同。

使用nil的检查来检查应用程序的逻辑,而不是避免崩溃。Objective-C运行时会处理向一个nil的对象 发送消息的情况。如果方法没有返回值,就没关系。


总结:不要抛出Objective-C异常,但准备从第三方的调用或者系统调用捕捉异常。


当使用Objective-C++写基于栈的对象的代码时,如果抛出Objective-C异常,对象不会被清 理。(析构函数)


dealloc中对象被释放的顺序应该与他们在@interface中声明的顺序一致


A u to lea se之后reta in

当给一个变量赋值新的对象时,必须先释放掉旧的对象以避免内存泄露。有一些正确的方法来处理 它。我们选择autorelease之后retain的方法因为事实证明它更少地出错。注意大的循环会填满 autorelease pool,并且可能效率上会差一点,但这点折衷我们认为是可以接受的。

- (void)setFoo:(GMFoo *)aFoo {
[foo_ autorelease]; // Won't dealloc if |foo_| == |aFoo| foo_ = [aFoo retain];

}

总结:给对象赋值时遵守autorelease之后retain的模式。


当创建临时对象时,在同一行使用autolease,而不是在同一个方法的后面语句中使用一个单 独的release。

不要调用NSObject类的类方法new,也不要在子类重写。相反,你应该使用alloc和init方法来 创建并初始化一个对象。



posted @ 2011-09-29 18:00  Gang.Wang  阅读(1765)  评论(0编辑  收藏  举报