0
グリーティング、UIImage/Memoryでの描画問題 - 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メソッドでtemp UIImageを作成しました。これにより、cgimageを解放し、フォーマットされたUImageを返すことができます。私はまた、これを私のrefreshMapメソッドに返すための新しいUIImageを作成しました。助けてくれてありがとう! – Puppet