건물에있는 응용 프로그램 중 하나에서 심각한 메모리 누수가 발생합니다. UITabBarview 안에있는 UINavigatonController 있습니다. NavView 내부에는 MKMap보기가 있습니다. 콜 아웃에서 액세서리 버튼을 클릭하면 상세보기가로드됩니다. 자세히보기에서 for (array in object) 루프를 사용하여 plist에서 테이블을 채우려고합니다. plist는 사전 배열입니다. 나는 사전을 달려서 콜 아웃 (callout)의 제목 인 키가있는 사전을 찾은 다음 해당 사전에서 배열을 가져온다. 그것은 모든 simulaor에서 잘 작동하지만 나는 그것을하는 방식으로 대규모 메모리 누수가 일어나고있다. 어떤 아이디어가 계속되고 있니?iPhone SDK에서 (객체 배열로) 사용할 때의 메모리 누수
- (void)viewDidLoad {
self.title = @"Route Details";
NSString *path = [[NSBundle mainBundle] pathForResource:@"stopLocation" ofType:@"plist"];
holderArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
[self getRouteArray];
routeDetails.delegate = self;
routeDetails.dataSource = self;
}
-(void)getRouteArray{
for (NSMutableDictionary *dictionary in holderArray) {
//NSString *stopName = [dictionary objectForKey:@"StopName"];
//NSString *stopName = [[NSString alloc] initWithString:[dictionary objectForKey:@"StopName"]];
BOOL testString = [currentRoute isEqualToString:[dictionary objectForKey:@"StopName"]];
if (testString) {
routeArray = [[NSMutableArray alloc] initWithArray:[dictionary objectForKey:@"RouteService"]];
}
}
}
- (void)dealloc {
[routeArray release];
[routeDetails release];
[super dealloc];
}
holderArray는 ivar이고 경로 배열도 마찬가지입니다. 보시다시피 nstrings과 배열을 할당하는 몇 가지 방법을 시도했지만 모두 똑같은 누출을 일으키는 것 같습니다. NSCFString, NSCFDictionary 및 NSCFArry에서 누출되고있는 성능 도구에 따르면. 내가 dealloc에 routeArray를 발표하고 괜찮 았지만, holdArray를 릴리스하면 상세 뷰에서 내지도로 돌아갈 때마다 충돌이 발생합니다. 나는 for 루프에서 사용 된 문자열과 사전을 다루는 방법을 확실히 알지 못한다.
그냥 상세보기과 같이 생성되는 추가 : 위의가 불분명 한 경우- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
NSString *selectedRouteName = [NSString stringWithFormat:@"%@",view.annotation.title];
RouteDetailView *rdc = [[RouteDetailView alloc] initWithNibName:@"RouteDetailView" bundle:nil];
[rdc setCurrentRoute:selectedRouteName];
[self.navigationController pushViewController:rdc animated:YES];
[rdc release];
}
죄송합니다. 알려 주시면 다시 말해 볼 수 있습니다.
예 testString은 한 번만 true입니다. 원래 holderArray를 공개하지 않은 이유는 navController를 다시 방문했을 때 응용 프로그램이 중단 될 것이기 때문입니다. 내가 휴식을 추가하고 holderArray에 대한 릴리스를 교체하고 그것이 작동하는 것 같습니다. 당신의 도움을 주셔서 감사합니다. 오전 4 시까 지 다른 문제를 고친 후 내 마음이 멍하게되어이 말은 나를 괴롭혔지만 그 대답은 너무 간단했다. –