我的touchesBegan方法里面的内存问题
我的项目中有内存问题。 但我不知道如何解决。 这是我正在做的。 就像你可以看到下面我有一个地图上的城市。 当你点击一个城市,城市亮起。
这就是我在touchesBegan方法中所做的。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"Touched"); CGPoint c = [[touches anyObject] locationInView: self]; struct CGPath *pat = (__bridge struct CGPath *)([arrayPaths objectAtIndex:0]); struct CGPath *pat2 = (__bridge struct CGPath *)([arrayPaths objectAtIndex:1]); // repeat this line 42 time (creating a struct for every city) CGPathRef strokedPath = CGPathCreateCopy(pat); CGPathRef strokedPath2 = CGPathCreateCopy(pat2); //I also repeated this line 42 times BOOL pointIsNearPath = CGPathContainsPoint(strokedPath, NULL, c, NO); BOOL pointIsNearPath2 = CGPathContainsPoint(strokedPath2, NULL, c, NO); //I also repeated this line 42 times CFRelease(strokedPath); CFRelease(strokedPath2); //I also repeated this line 42 times if (pointIsNearPath){ if([self.subviews containsObject:_imgLommel]) { NSLog(@"Remove"); [_imgLommel removeFromSuperview]; [arrCities removeObject:[NSNumber numberWithInt:1]]; }else{ NSLog(@"add"); [self addSubview:_imgLommel]; [arrCities addObject:[NSNumber numberWithInt:1]]; } } if (pointIsNearPath2){ if([self.subviews containsObject:_imgHechtel]) { NSLog(@"Remove"); [_imgHechtel removeFromSuperview]; [arrCities removeObject:[NSNumber numberWithInt:2]]; }else{ NSLog(@"add"); [self addSubview:_imgHechtel]; [arrCities addObject:[NSNumber numberWithInt:2]]; } } //What I do here is I place an image with the colored city on top off the other images. If the image is already there I remove it. //I also repeated this line 42 times
所以现在的问题。 一切顺利。 但是,select几个图像后,应用程序closures,我没有得到任何错误消息。 我在这个问题上挣扎了好几个星期才知道。
可以请有人帮助我呢?
亲切的问候。
编辑
经过一些testing后,我发现,当我注释掉下面的行时,我不会得到错误:
if (pointIsNearPath43){ if([self.subviews containsObject:_imgHoeselt]) { NSLog(@"Remove"); // [_imgHoeselt removeFromSuperview]; [arrCities removeObject:[NSNumber numberWithInt:43]]; }else{ NSLog(@"add"); // [self addSubview:_imgHoeselt]; [arrCities addObject:[NSNumber numberWithInt:43]]; } } //Commented it also out in the other cities.
启用NSZombieEnabled来检查项目内部的内存问题。
- 然后转到编辑计划 – >参数
2-select“诊断”选项卡,然后单击“启用僵尸对象”
这将释放的对象转换为NSZombie实例,在再次使用时会打印控制台警告。 这是一个增加内存使用的debugging辅助工具(没有任何对象真的被释放),但改善了错误报告。
一个典型的例子是当你过度释放一个对象,而你不知道是哪一个:
- 为iOS和macOS自托管您自己的StrongSwan IKEv2 / IPsec最新VPN服务器
- setAccessibilityLabel和accessibilityIdentifier在ios中有什么区别?
- 我如何修复未找到的“GADInsterstitial.h”文件…但它在我的列表中?
- 本月的第一天和最后一天
- Objective-C,sorting包含数字的string数组
- 试图填充NSMutableArray,但隐式转换的int为id是不允许与弧
- 如何在iOS应用程序中将.svg url显示为图像
- 单元格内的视图框架在cellForRowAtIndexPath中没有变化
- 地理栅栏:如何使用Swift在现实世界中实现虚拟边界?