0
인사말,UIImage/메모리 문제에 드로잉 - objective-c
지도에 원을 그리려는 중입니다. 이 프로젝트의 모든 분리 된 조각들은 독립적으로 작동하지만, 나는 그것들을 모두 합치면 부서진다.
대부분의 내용을 유지하면서 내 viewDidLoad에서 내 UI를 설정했습니다. 이 같은
-(void)refreshMap{
NSString *thePath = [NSString stringWithFormat:@"http://maps.google.com/staticmap?center=%f,%f&zoom=%i&size=640x640&maptype=hybrid",viewLatitude, viewLongitude, zoom];
NSURL *url = [NSURL URLWithString:thePath];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *mapImage = [[UIImage alloc] initWithData:data];
mapImage = [self addCircle:(mapImage) influence:(70) latCon:(320) lonCon:(320)];
NSLog(@"-- mapimageview retaincount %i",[mapImage retainCount]);
mapImageView.image = mapImage;
[mapImage release];}
설치는 한 번 원으로지도를로드 할 것이다, 그러나지도를 다시 새로 고칠 경우 충돌 :
그때 내 새로 고침지도 방법을 호출하는 터치 이벤트를 사용합니다.
mapImage 릴리스를 주석 처리하면 반복적으로 작동하지만 메모리 누수가 발생합니다. 내가 사용
addCircle 방법 :
은-(UIImage *)addCircle:(UIImage *)img radius:(CGFloat)radius latCon:(CGFloat)lat lonCon:(CGFloat)lon{
int w = img.size.width;
int h = img.size.height;
lon = h - lon;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
//draw the circle
CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
CGRect leftOval = {lat- radius/2, lon - radius/2, radius, radius};
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 0.3);
CGContextAddEllipseInRect(context, leftOval);
CGContextFillPath(context);
CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
return [UIImage imageWithCGImage:imageMasked];}
는 어떤 통찰력/조언이 크게 감사합니다!
답변 해 주셔서 감사합니다. 나는이 제안을 시도했지만 새로운 UIImage를 만들고 대신 형식이 지정된 이미지를 할당했지만 유감스럽게도 새 이미지의 할당을 해제하지 않으면 동일한 결과를 얻습니다. 또한 앱 누수가 발생합니다. 그렇지 않으면 두 번째로 충돌합니다. 을 통하여. – Puppet
Mark Bessey는 올바른 길을 걷고있었습니다. addcircle 메서드에서 임시 UIImage를 만들었습니다. 그러면 cgimage를 릴리스하고 형식이 지정된 UImage를 반환 할 수 있습니다. 나는 또한이 새로운 refreshMap 메서드에서 반환 될 수있는 새 UIImage를 만들었습니다. 도와 주셔서 감사합니다! – Puppet