点引用是地道的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方法来
创建并初始化一个对象。
原文链接: https://www.cnblogs.com/GnagWang/archive/2011/09/29/2195772.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/33317
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!