Objective c 如何释放保留的属性
很长一段时间以来,我一直在思考如何在dealloc方法中释放保留的属性。为了清楚起见,下面是一些示例代码:Objective c 如何释放保留的属性,objective-c,Objective C,很长一段时间以来,我一直在思考如何在dealloc方法中释放保留的属性。为了清楚起见,下面是一些示例代码: @interface MyClass: NSObject { //... NSString *myStr; //... } @property (retain, nonatomic) NSString *myStr; //... @end @implementation MyClass @synthesize myStr; //... //version
@interface MyClass: NSObject
{
//...
NSString *myStr;
//...
}
@property (retain, nonatomic) NSString *myStr;
//...
@end
@implementation MyClass
@synthesize myStr;
//...
//version 1 of dealloc
-(void)dealloc
{
[myStr release];
//...
}
//version 2 of dealloc
-(void)dealloc
{
self.myStr = nil;
}
//...
@end
如您所见,在我的示例代码中有两个版本的dealloc方法。就我而言,第一种方法比第二种方法产生的机器代码更少,因此速度更快。但我曾经听说,用第二种方法处理保留的属性是一个好习惯,即通过使用self关键字调用setter将其设置为nil。有人能告诉我这些都是真的吗?如果是真的,我应该坚持“好习惯”,还是不管什么“好习惯”都要加快代码的速度
提前感谢您。如果您有选择,因为它不太可能有副作用。但在任何实际应用中,速度问题几乎毫无疑问是无关紧要的。与
dealloc
中的release
相比,属性访问器的速度不会对您的程序产生任何明显的影响。(如果没有其他问题,首先分配对象的成本可以通过减少dealloc
的一些消息发送得到,因此如果这是一个实际问题,更好的方法是减少分配。)明白了,谢谢。我了解到“self.myStr=nil;”将是“[myStr release];myStr=nil;”(这里有两个语句)。所以我认为“[myStr release];”(一条语句)会更快。顺便问一下,关于“副作用”,你在这里的确切意思是什么?@xuxu:KVO通知,对撤销堆栈的更改——诸如此类的事情。