NSString的甚至发布在正确的地方(我猜)泄露?

当我分析的仪器下面的代码,它将报告变量imageName泄漏:

//loadImagesFromPotatoesIndexesArray -(void) loadImagesFromPotatoesIndexesArray{ //Load Textures from Disk textures = [[NSMutableArray alloc] init]; //NSArray *masks = [[NSArray alloc] initWithArray:mainDelegate.masksArray]; for (int i = 0;i<[potatoesIndexesArray count];i++){ int imageNumber = [[potatoesIndexesArray objectAtIndex:i]intValue]; NSString *imageName = [[NSString alloc] initWithFormat:@"texture%d",imageNumber]; UIImage *image = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]]; NSArray *pics = [[NSArray alloc] initWithObjects: [self maskImage:image withMask:[mainDelegate.masksArray objectAtIndex:i]], [self maskImage:image withMask:[mainDelegate.masksArray objectAtIndex:i]], imageName, nil]; [textures addObject:pics]; [image release]; [imageName release]; [pics release]; } }

[potatoesIndexesArray计数] = 16,所以我有16倍NSCFString泄漏......但对我来说代码被尊重的内存管理?显然不是! 我做错了什么?

--------------解决方案-------------

你永远不放开“纹理”阵列。 它仍然持有的一切。

多久loadImagesFromPotatoesIndexesArray叫你的代码? 如果多次调用,所有的原始数组中的值会被泄露,因为你没有正确地释放textures与一个新的数组替换它。

如果被称为不止一次,这应该做的伎俩:

// load textures from disk
[textures removeAllObjects];
//NSArray *masks = [[NSArray ...

for (int i=0; ...

如果认为,当你在你的照片添加imageName阵列它保持它;-)(我想回答你的问题)

但是,为什么你在这里做一个页头? 为什么不能做这样的事情

[NSString的stringWithFormat:@“”]

祝你好运 !

这是一个复杂的问题。 您ALLOC的imageName,所以retainCount是1,那么您将其添加到一个数组,保留计数为2,当您松开imageName,保留计数再次为1。 然后,如果你还发布了图片阵,一切都会好起来。 但是,你的照片阵列中加入纹理,然后将pics发布,让你的照片retainCount还是1和你imageName泄漏。 但是,如果你发布的textures数组,一切都会好起来

NSString *imageName = [[NSString alloc] initWithFormat:@"texture%d",imageNumber];

NSArray *pics = [[NSArray alloc] initWithObjects:
[self maskImage:image withMask:[mainDelegate.masksArray objectAtIndex:i]],
[self maskImage:image withMask:[mainDelegate.masksArray objectAtIndex:i]],
imageName,
nil];

[imageName release];

分类:iphone 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.462 (s). 10 q(s)