0

iOSのメモリ使用量について質問です。以下に示すようにコードを実装し、デバイスで約10分間実行すると、停止し、「受信メモリ警告」という警告が表示されました。なぜこの警告が表示されるのだろうか。

NSArray *ants = [mapView overlays];
for(bb = 0; bb < [polygonArray count]; bb++){
        int attr=[[idArray objectAtIndex:bb]floatValue];


        coords = malloc(sizeof(CLLocationCoordinate2D) * [[polygonArray objectAtIndex:bb] count]);
        for (int a = 0;a < [[polygonArray objectAtIndex:bb] count]; a++){
            coords[a].latitude = [[[[polygonArray objectAtIndex:bb]objectAtIndex:a]objectAtIndex:0]doubleValue];
            coords[a].longitude = [[[[polygonArray objectAtIndex:bb]objectAtIndex:a]objectAtIndex:1]doubleValue];
        }
        polygon = [[MKPolygon alloc]init];
        polygon = [MKPolygon polygonWithCoordinates:coords count:[[polygonArray objectAtIndex:bb]count]]; 
        //free(coords);
        [previousPolygons addObject:polygon];

            }
        [mapView addOverlay:polygon];
        }

    }
[mapView removeOverlays:ants];
4

1 に答える 1

1

開き括弧よりも閉じ括弧の方が多いように見えるため、表示されているよりも多くの機能がある可能性がありますが、コードを改善すると思われるものを以下に示しました

NSArray *ants = [mapView overlays];
for(bb = 0; bb < [polygonArray count]; bb++){
    int attr=[[idArray objectAtIndex:bb]floatValue];


    coords = malloc(sizeof(CLLocationCoordinate2D) * [[polygonArray objectAtIndex:bb] count]);
    for (int a = 0;a < [[polygonArray objectAtIndex:bb] count]; a++){
        coords[a].latitude = [[[[polygonArray objectAtIndex:bb]objectAtIndex:a]objectAtIndex:0]doubleValue];
        coords[a].longitude = [[[[polygonArray objectAtIndex:bb]objectAtIndex:a]objectAtIndex:1]doubleValue];
    }
    //Remove the next line because polygonWIthCoordinates creates one for you
    //polygon = [[MKPolygon alloc]init];
    polygon = [MKPolygon polygonWithCoordinates:coords count:[[polygonArray objectAtIndex:bb]count]]; 
    //reinstate this line
    free(coords);
    [previousPolygons addObject:polygon];

}
//This is outside the for-loop so you'll only be adding the last polygon
[mapView addOverlay:polygon];
}

}
[mapView removeOverlays:ants];
于 2012-11-13T20:32:54.507 に答える