2011-04-21 57 views
0

我已经将MKMapView添加到我的应用程序,但是当我将地图分配到内存中时,它以保留计数2开始(我使用iOS 4.0作为基本SDK)初始化MKMapView开始保留计数2

MKMapView *x = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 370)]; 

NSLog(@"map retain count: %i", [x retainCount]); 

[self addSubview:x]; 


NSLog(@"map retain count: %i", [x retainCount]); 

[x release]; 


NSLog(@"map retain count: %i", [x retainCount]); 

[x removeFromSuperview]; 


NSLog(@"map retain count: %i", [x retainCount]); 

输出显示这一结果

2011-04-21 14:09:06.159 xx[7373:207] map retain count: 2 
2011-04-21 14:09:06.159 xx[7373:207] map retain count: 3 
2011-04-21 14:09:06.159 xx[7373:207] map retain count: 2 
2011-04-21 14:09:06.160 xx[7373:207] map retain count: 1 

保留计数应在最后一个日志权为0? 或者它是否使用api已经创建的预定义对象?

+6

忘记了retainCount - 在99.99%的所有情况下,检查它显然是错误的。 – Till 2011-04-21 12:19:07

+0

[何时使用-retainCount?](http:// stackoverflow。COM /问题/ 4636146 /时使用的,retaincount) – 2011-05-17 18:15:33

回答

4

你不应该依靠retainCount因为有通过由您创建的iOS保留对象的可能性,请阅读下面什么苹果说一下retainCount

重要:此方法在调试内存管理问题时通常没有任何价值。因为任何数量的框架对象都可能保留了一个对象以保存对它的引用,同时autorelease池可能在对象上保存了任意数量的延迟发布,所以很难从此获得有用的信息方法。

要了解必须遵守的内存管理的基本规则,请参阅“内存管理规则”。要诊断内存管理的问题,使用合适的工具:

LLVM/Clang静态分析通常可以发现内存管理的问题,你运行程序之前就。

的Object的Alloc仪器在仪器中的应用(参见仪器用户指南)可以跟踪对象分配和破坏。

鲨鱼(见鲨鱼用户指南)也型材内存分配(除程序的许多其他方面)。

0

不要看保留计数,你只会感到困惑。坚持遵循内存管理规则并假装保留计数不存在。

仪器是否说它泄漏?

0

它会做自己大有好处,如果你不看retainCount试图了解内存管理做。关于Memory Management的Apple参考资料可以帮助你。不用担心retainCount是什么;只要确保你释放拥有所有权的对象并且不释放不属于你自己的对象。请看看Object Ownership

0

的保留计数的内存模型的整点是,你只担心你自己的责任和其他对象担心只有他们。如果您正在查看-retainCount,则您正在做出(可能是无效的)其他对象正在做什么的假设。

也就是说,你所看到的原因是,一些其他的对象还保留了地图视图。这可能是地图视图本身,也可能是您不知道的一些内部地图视图管理器,或其他内容。