Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何释放保留的属性_Objective C - Fatal编程技术网

Objective c 如何释放保留的属性

Objective c 如何释放保留的属性,objective-c,Objective C,很长一段时间以来,我一直在思考如何在dealloc方法中释放保留的属性。为了清楚起见,下面是一些示例代码: @interface MyClass: NSObject { //... NSString *myStr; //... } @property (retain, nonatomic) NSString *myStr; //... @end @implementation MyClass @synthesize myStr; //... //version

很长一段时间以来,我一直在思考如何在dealloc方法中释放保留的属性。为了清楚起见,下面是一些示例代码:

@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通知,对撤销堆栈的更改——诸如此类的事情。