나는 내 인생에서 나도 알아낼 수없는 코드를 가지고있다. JSON 소스에서 데이터를 가져 와서 자습서 및 SO에 명시된대로 NSDictionary에 넣습니다. 응용 프로그램을 프로파일 링 할 때이 NSDictionary로 인해 메모리 누수가 발생하지만이 함수가 끝날 때 릴리스하면 응용 프로그램이 충돌합니다. 어떤 제안? 는 (그런데 : 나는 일반적으로의 Obj-C 프로그래밍에 새로 온 사람, 그래서이 코드는 주로 다양한 소스에서 cherrypicked됩니다.) 여기NSDictionary 누설 메모리
- (void)fetchedData:(NSData *)responseData {
//parse JSON for empty return
if([responseData length] != 0){
NSError* error = nil;
//Convert JSON data to Obj-C
NSDictionary* allShotData = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSString *player = [[allShotData objectForKey:@"player"] objectForKey:@"name"];
NSString *shotDribbblePage = [allShotData objectForKey:@"url"];
NSString *shotTitle = [allShotData objectForKey:@"title"];
NSURL *imageURL = [NSURL URLWithString:[allShotData objectForKey:@"image_url"]];
shotPageURL = [shotDribbblePage retain];
//***********************
// Setup a-sync loading of shot
//***********************
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadImage:) object:imageURL];
[queue addOperation:operation];
[operation release];
[queue release];
}
else{
airballCount++;
if (airballCount <= 20) {
[self getDribbbleData];
}
else{
NSLog(@"Too many airballs. Bailing out");
[self showNoConnectionModal];
}
}
}
또는'[shotPageURL release]; shotPageURL = nil; shotPageURL = [shotDribbblePage retain]; '속성이없는 경우. – beryllium
@ 베릴륨 언급 - 고마워. – justin
감사합니다 저스틴, 그건 실제로 문제 중 하나지만, 그것은 유일한 것으로 밝혀졌습니다. 한 남자가 사본을 추가하고 나중에 수동으로 풀어 shotDribblePage를 복사하는 것에 대해 언급했습니다. 이것은 빨간 스파이크가 더 이상 나타나지 않는 것처럼 트릭을 분명히했습니다. –