当我遇到死胡同的时候,我以为我真的很接近发布这个新的App。我的代码在模拟器(Xcode 4.0.2)中没有内存泄漏但在我的设备上报告内存泄漏。
我认为我的问题与我复制一个对象有关,因为在我的故障排除尝试中我尝试了没有副本,然后内存泄漏消失了(当然我的功能也是如此! )。
我所做的是将一些UIView子类的实例添加到数组中。这个子类(其中cityToAdd是一个实例的城市)有两个UIViews和一些我需要在以后访问的变量。
如果我这样做,我的设备上会出现内存泄漏:
[arrayOfCities addObject:[[cityToAdd mutableCopy] autorelease]];
但如果我这样做,我不会(但功能松散)
[arrayOfCities addObject:cityToAdd];
在子类中,我有这个来处理复制:
- (id)mutableCopyWithZone:(NSZone *)zone{
Cities *newCity = [[Cities allocWithZone:zone] init];
[newCity initWithCityName:cityName
onRing:ring
withTimeZone:timeZone
withTimeZoneOffset:timeZoneOffset
withDSTAngle:DSTAngle
andDST:isDST];
return newCity;
}
从仪器我在设备上测试时得到这个:
当我在第二行向下钻取时,它显示了这个:
最后我的initWithCityName方法(对不起这么长的帖子!!)我把它作为图片来获取乐器的颜色和信息......
最后,UIIMage imageNamedUniversal是一个扩展,可以在iPad上为我提供@ 2x图像(但我尝试使用普通的图像命名并获得相同的内存泄漏)。
我不知道从哪里开始!!欣赏任何想法。
由于
答案 0 :(得分:0)
为什么要调用两个初始化方法?您正在调用 init 和 initWithCityName ....
答案 1 :(得分:0)
需要考虑两件事:
将cityView和DSTView添加为子视图后,您可以而且应该将其发布。
您在copyWithZone中初始化newCity两次。
答案 2 :(得分:0)
感谢您的快速回复和建议。你让我走上正轨。我添加到我的数组中的cityToAdd在循环中添加了几次,但是我将alloc和init保留在循环之外。一旦我将它移到循环中,它就可以在模拟器和设备中工作。
奇怪的是模拟器不会报告内存泄漏...
再次感谢您的快速回复!