我的项目中存在内存问题。但我不知道如何解决它。这就是我正在做的事情。就像你在下面看到的那样,我有一张有城市的地图。当你点击一个城市时,城市就会亮起来。
这就是我在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
所以现在问题。一切顺利。但是在选择了几个图像之后,应用程序关闭了,我没有收到任何错误消息。几个星期以来,我一直在努力解决这个问题。
请有人帮我这个吗?
亲切的问候。
修改
经过一些测试后,我发现当我注释掉以下几行时,我没有收到错误:
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.
答案 0 :(得分:1)
启用NSZombieEnabled以检查项目内的内存问题。
2-选择“诊断”选项卡,然后单击“启用僵尸对象”
这会将已释放的对象转换为NSZombie实例,再次使用时会打印控制台警告。这是一种调试辅助工具,可以增加内存使用(没有实际释放对象),但可以改善错误报告。
典型的情况是当你过度释放一个物体但你不知道哪一个: