首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >释放对象:[obj release];不够,需要[obj release],obj = nil;?

释放对象:[obj release];不够,需要[obj release],obj = nil;?
EN

Stack Overflow用户
提问于 2011-09-09 05:32:39
回答 1查看 153关注 0票数 0

下面我得到了一些难看的代码:

代码语言:javascript
复制
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy"];
NSDate *date = [NSDate date];
NSString *textWithYear = [NSString stringWithFormat:@"text and year %@", [dateFormatter stringFromDate:date] ];
[dateFormatter release];
NSLog(@"%i", [dateFormatter retainCount]); // returns 1 !

如你所见,保留计数器返回1,我认为这意味着对象没有被释放。如果我将字符串更改为

代码语言:javascript
复制
[dateFormatter release], dateFromatter = nil;

保留计数器返回0,这可能是因为它不能计数保留为nil :)

有没有什么我不理解的关于保留计数器的东西,或者这个对象真的没有被释放?当我第二次向它发送release (努力获得0保留计数)时,它意外地崩溃了:)

还有一个问题:如果dateFormatter真的发布了,为什么当我调用dateFormatter retainCount时它不会崩溃?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-09 05:36:58

您正确地释放了对象;不用担心保留计数。并且不要使用-retainCount。有关原因的更多详细信息,请参阅When to use -retainCount?Calling -retainCount Considered Harmful

请注意,如果对象确实被销毁了,这里的代码将崩溃(因为对-retainCount的调用是在您释放它之后发生的,并且可能是指向一个悬空指针);在使用完变量之后将它们设置为nil是防止这种情况发生的一个好习惯。但这与你的代码是否泄漏没有关系。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7354771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档