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。
使用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方法来 创建并初始化一个对象。
作者:GangWang
出处:http://www.cnblogs.com/GnagWang/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。