0

在这里,我得到了一些丑陋的代码:

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 !

如您所见,retains 计数器返回 1,我想这意味着该对象没有被释放。如果我将该字符串更改为

[dateFormatter release], dateFromatter = nil;

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

关于保留计数器有什么我不明白的地方,或者这个对象真的没有释放吗?当我release第二次发送给它时(努力使保留计数为零),它会按预期粉碎:)

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

4

1 回答 1

7

你正确地释放了你的对象;不要担心保留计数。并且不要使用-retainCount. 请参阅何时使用 -retainCount?调用 -retainCount 被认为是有害的,以了解有关原因的更多详细信息。

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

于 2011-09-08T21:36:57.543 回答