0

我有一个关于内存的问题。根据下面的代码和日志,是0x6868190泄漏吗?

代码:

self.point = [NSString stringWithFormat:@"R"];
NSLog(@"********First********%d",[point retainCount]);
NSLog(@"********First********%p",point);
self.point = [NSString stringWithFormat:@"A"];
NSLog(@"********Second********%d",[point retainCount]);
NSLog(@"********Second********%p",point);

日志:

 2012-04-17 20:27:49.838 test_[297:f803] ********First********2
 2012-04-17 20:27:49.838 test_[297:f803] ********First********0x6868190
 2012-04-17 20:27:49.839 test_[297:f803] ********Second********2
 2012-04-17 20:27:49.839 test_[297:f803] ********Second********0x6879500
4

4 回答 4

2

不要retainCount用于检查内存泄漏,因为内部实现可能会如您所料改变它。

xcode 具有检查泄漏的适当工具,因此我建议您使用它。

于 2012-04-17T12:48:12.513 回答
1

使用 Instruments 检查内存泄漏。保留计数不为零(或者我猜您期望为 1)这一事实并不一定意味着存在泄漏。如有必要,这些对象将在运行循环结束时释放。

stringWithFormat 调用创建了一个保留计数为 1 的对象(将自动释放)。然后你的属性可能被声明为retain/strong,它增加了一个在你的主对象被释放时将被释放的属性。因此是两个。

于 2012-04-17T12:54:20.687 回答
1

我的网站“何时使用retainCount? ”涵盖了这一点。见问题七和八。

但总而言之,没有。您的变量是自动释放的,因此它不会泄漏(除非您忘记在 中释放dealloc)。

于 2012-04-17T12:48:20.563 回答
0

不,类NSString生成的那些NSStringautorealeased

于 2012-04-17T12:40:20.543 回答