マップベースのアプリケーションを開発しました。我々は、マップビュー上に表示データ用のマルチスレッドを実装しました。アプリケーションが長時間(約20分)実行されている間、アプリケーションはメモリ警告レベル-1を表示します。数分後にメモリ警告レベル2を与え、レベル2のアプリケーションがクラッシュするかスリープ状態になる。iPhoneでメモリレベルの警告を処理するにはどうすればよいですか?
私たちは、メモリリーク、ゾンビロットを確認しました。しかし、私たちのアプリケーションにはメモリリークやゾンビはありません。
メモリの警告レベルをどのように処理するかアドバイスしてください。メモリレベルの警告を克服するために、いくつかの線を描いてください。
////更新... 私は私が私のメモリ使用量を増加させるCGContextRefを使用したため、私はドローポリ注釈のために、そのためにマルチスレッドを使用している
CGContextRef context = UIGraphicsGetCurrentContext();
のメモリ使用量の増加を発見しましたいつでも私はそれを呼び出します。
私は次の時間よりも、それを解放した場合、それは誰もが任意のアイデアを持っている場合、私は私を助けるhere.Please私の描画コードをポジショニングしていてくれ
無効なコンテキストエラーを示したので、私はどのようにリリース文脈がわかりません。
-(void) drawRect:(CGRect)rect {
NVPolylineAnnotation* annotation = self.annotation;
CGFloat POLYLINE_WIDTH = 9;
if(annotation.getZoomLevel == 7) {
POLYLINE_WIDTH = 1.5;
}
else if(annotation.getZoomLevel == 8) {
POLYLINE_WIDTH = 2.5;
}
else if(annotation.getZoomLevel ==9) {
POLYLINE_WIDTH = 3;
}
else if(annotation.getZoomLevel ==10) {
POLYLINE_WIDTH = 3.4;
}
else if(annotation.getZoomLevel == 11) {
POLYLINE_WIDTH = 4;
}
else if(annotation.getZoomLevel <= 13) {
POLYLINE_WIDTH = 4.3;
}
else if (annotation.getZoomLevel == 14) {
POLYLINE_WIDTH = 5.4;
}
else if(annotation.getZoomLevel == 15) {
POLYLINE_WIDTH = 8;
}
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
CGContextSetLineWidth(context, POLYLINE_WIDTH);
CGContextSetAlpha(context, 0.6);
for(NSDictionary *route in annotation.routes) {
NSString *locations = [route valueForKey:@"Locations"];
double speed = [[route valueForKey:@"Speed"] doubleValue];
if (locations && ([locations length]/16 > 1)) {
UIColor *color;
if (speed <= 20) {
color = [UIColor colorWithRed:222/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
}
else if (speed <= 40) {
color = [UIColor colorWithRed:253/255.0 green:91/255.0 blue:2/255.0 alpha:1.0];
}
else if (speed <= 60) {
color = [UIColor colorWithRed:253/255.0 green:145/255.0 blue:4/255.0 alpha:1.0];
}
else if (speed <=80) {
color = [UIColor colorWithRed:255/255.0 green:212/255.0 blue:4/255.0 alpha:1.0];
}
else if (speed >80) {
color = [UIColor colorWithRed:42/255.0 green:176/255.0 blue:39/255.0 alpha:1.0];
}
CGContextSetStrokeColorWithColor(context, color.CGColor);
for (int i = 0; i <= locations.length - 32; i += 32) {
CLLocationCoordinate2D coordinates;
coordinates.latitude = hexDecode([locations substringWithRange:NSMakeRange(i, 16)]);
coordinates.longitude = hexDecode([locations substringWithRange:NSMakeRange(i+16, 16)]);
CGPoint point = [_mapView convertCoordinate:coordinates toPointToView:self];
if (i == 0)
CGContextMoveToPoint(context, point.x, point.y);
else
CGContextAddLineToPoint(context, point.x, point.y);
}
[self setNeedsDisplay];
CGContextStrokePath(context);
}
}
context = NULL;
UIGraphicsEndImageContext();
}予め
おかげ。
最初に何を試しましたか? ** Googleで最初に**「メモリ警告iOSを処理する」**を検索してください。 –
@ParthBhatt:私はこれを見つけて見つけたhttp://stackoverflow.com/questions/5980636/ios-low-memory-crash-but-very-low-memory-usage – Nit
ViewDidUnload()メソッドですべてのアウトレットを解放します。 –