我的iphone应用程序崩溃后发出4次低内存警告,仪器显示没有内存泄漏,但在内存分配中,实时字节数上升到4.7mb,而所有字节数上升到79.0 MB,此时应用程序崩溃
任何帮助都将受到高度赞赏
for (int i = 0; i<3; i++)
{
UIImage *rendered_image;
UIGraphicsBeginImageContextWithOptions(sub_view.bounds.size, NO, 0.0);
[appdelegate.arrimages removeAllObjects];
[appdelegate.arranimations removeAllObjects];
NSString *oldgroup = [[NSString alloc] init];
NSString *currentgroup = [[NSString alloc] init];
for(int i=0; i<[sub_view.data count]; i++)
{
oldgroup = (i>0) ? [sub_view.group objectAtIndex:(i-1)] : [sub_view.group objectAtIndex:i];
currentgroup = [sub_view.group objectAtIndex:i];
/*
IF DIFFERENT GROUP NAME RECEIVED
1-GET NEW INSTANCE OF IMAGE
2-SAVE PREVIOUS IN ARRAY
*/
if (![oldgroup isEqualToString:currentgroup])
{
rendered_image = UIGraphicsGetImageFromCurrentImageContext();
[self SaveImagesOfAnimation:[self compressImageDownToPhoneScreenSize:rendered_image]];
[appdelegate.arranimations addObject:[sub_view.anim objectAtIndex:i]];
UIGraphicsEndImageContext();
UIGraphicsBeginImageContextWithOptions(sub_view.bounds.size, NO, 0.0);
}
id element = [sub_view.data objectAtIndex:i];
color = [sub_view.fillColor objectAtIndex:i];
[color setFill];
[element fill];
[[UIColor blackColor] setStroke];
[element stroke];
}
rendered_image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self SaveImagesOfAnimation:[self compressImageDownToPhoneScreenSize:rendered_image]];
}
答案 0 :(得分:0)
增加内存使用而不泄漏意味着您正在存储您从未发布的数据,并且仍然持有对它的引用。
这通常意味着当你在其中放入更多数据时会自动增长的数据结构之一,如NSMutableArray,应该受到指责。他们会愉快地保存您添加到他们的所有数据,并且内存分析器不会发现任何泄漏,因为放在NSMutableArray中的项目 - 按照定义 - 从未被释放,也没有被检测为泄漏,因为它们是从数组中引用它们。 / p>
编辑:如果没有明显的地方可以解决这个问题的一般方法,请参阅顶部@Costique的评论;
仪器还可以显示您已分配的对象类型 精确的堆栈跟踪,因此您应该能够快速找到它 进行。