有人可以告訴我我在做什麼錯嗎?我使用這種方法來繪製圖像。但代碼中的某些內容似乎無法正確釋放,因爲每次我調用此方法時,我的應用程序內存佔用量都會增加。iPhone:內存管理
在這裏,我提供了增加我的記憶力的方法。
-(void)imagemaking
{
UIGraphicsEndImageContext();
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
SBJSON *parser = [[SBJSON alloc] init];
statuses = [parser objectWithString:responseString
error:nil];
[parser release];
networkConnection.image = [UIImage imageNamed:@"NetworkTrans1.png"];
[updateTimeClock setImage:[UIImage imageNamed:@"GreenClock.png"] forState:UIControlStateNormal];
NSArray *segment = [[NSArray alloc]init];
segment = [statuses valueForKey:@"Segments"];
int linewidth = 3;
CGSize polyimagesize = CGSizeMake(self.mapView.frame.size.width , self.mapView.frame.size.height);
UIGraphicsBeginImageContextWithOptions(polyimagesize, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, linewidth);
CGContextSetAlpha(context, 0.6);
for(NSDictionary *route in segment) {
NSString *locations = [route valueForKey:@"Locations"];
if (locations && ([locations length]/16 > 1)) {
UIColor *color = [UIColor blueColor];
CGContextSetStrokeColorWithColor(context, color.CGColor);
for (int i = 0; i <= locations.length - 32; i += 32) {
CLLocationCoordinate2D coordinates;
coordinates.latitude = hexDecode_iPhone([locations substringWithRange:NSMakeRange(i, 16)]);
coordinates.longitude = hexDecode_iPhone([locations substringWithRange:NSMakeRange(i+16, 16)]);
CGPoint point = [mapView convertCoordinate:coordinates toPointToView:self.mapView];
if (i == 0)
CGContextMoveToPoint(context, point.x, point.y);
else
CGContextAddLineToPoint(context, point.x, point.y);
}
CGContextStrokePath(context);
}
}
madeimage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[responseString release];
[segment release];
}
按我的調查,因爲CoreGraphics.But的內存佔用增加,我不知道如何減少內存使用或哪個對象是增加內存usage.Please提供指導線。
在此先感謝!
我想,首先你應該經歷整個代碼。我在函數的末尾釋放段。我在儀器的幫助下檢查整個10次,我發現在我的應用程序中沒有泄漏。 – Nit 2012-03-21 07:23:30
你正在釋放別的東西。 – jacekmigacz 2012-03-21 07:25:13
@Nit:你釋放'valueForKey:'返回的數組,而不是'alloc'和'init'返回的數組。它們是兩個獨立的數組對象,並且您立即用第二個數組替換第一個,從而泄漏第一個。即使有另外的泄漏(如果有的話,我不能在你顯示的代碼中看到它),jacekmigacz的答案是正確的。 – 2012-03-24 17:05:52