开发者

Memory Leak on device when using mutableCopy

I thou开发者_如何学运维ght that I was really close to release this new App of mine when I ran into a dead end. My code works without memory leaks in the simulator (Xcode 4.0.2) but reports memory leaks on my devices.

I think my issue is related to that I copy an object, because in my troubleshooting attempts I tried without a copy, and then the memory leak goes away (but of course so do my functionality!).

What I do is that I add a number of instances of a subclass of UIView to an array . This subclass(Cities of which cityToAdd is an instance) has two UIViews and some variables that I need to access at a later stage.

If I do this I get memory leaks on my devices:

[arrayOfCities addObject:[[cityToAdd mutableCopy] autorelease]];

But if I do this I don't (but loose functionality)

[arrayOfCities addObject:cityToAdd];

In the subclass I have this to handle the copying:

- (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;

}

From Instruments I get this when testing on a device:

Memory Leak on device when using mutableCopy

and when I drill down on the second row it shows this:

Memory Leak on device when using mutableCopy

Finally my initWithCityName method (sorry for such a long post!!) I put it as a picture to get the colors and messages from Instruments...

Memory Leak on device when using mutableCopy

Finally the UIIMage imageNamedUniversal is an extension to give me @2x images on the iPad (but I have tried with the normal imageNamed and get the same memory leaks).

I dont know where to start!! Appreciate any ideas.

Thanks


Why are you calling two initialization methods? You are calling init and initWithCityName....


Two things to consider:

After you add cityView and DSTView as subviews, you can and should release them.

And you are initializing newCity twice in your copyWithZone.


Thanks for fast replies and suggestions. You got me on the right track. The cityToAdd that I added to my array was added several times in a loop, but I kept the alloc and init outside of the loop. Once I moved it inside the loop it works in both simulator and device.

Weird that the simulator don't report that memory leak though...

Again, thanks for your fast replies!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜