MBProgressHUB를 사용하고 있는데 코드가 유사하므로 here입니다. 내 코드에 대한MBProgressHUD를 사용하여 메모리 누수가 발생했습니다.
어떤 것들은 :
- 코드 내 응용 프로그램 위임에는
- 다른 클래스의 숫자는 내가 을
- 내가 비동기있는 NSURLConnection로 사용하고
- 호출 아니 선언 : @property (비 원자, 유지) MBProgressHUD * HUD;
- 내가 할 아니요 : @ 합성 HUD;
- (그리고 물론 내의 dealloc에 공개하지 않습니다)
다음과 같이 내가 그것을 사용
- (void)setSearchingMode:(BOOL)isSearching {
// when network action, toggle network indicator and activity indicator
if (isSearching) {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
UIWindow *theWindow = [UIApplication sharedApplication].keyWindow;
HUD = [[MBProgressHUD alloc] initWithWindow:theWindow];
[theWindow addSubview:HUD];
//HUD.labelText = @"Connecting";
[HUD show:YES];
} else {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[HUD hide:YES];
[HUD removeFromSuperview];
[HUD release];
}
}
- (void)setSearchingText:(NSString *)whatToSay {
HUD.labelText = whatToSay;
}
나는 코드가 어딘가에 메모리 관리 문제를 일으키는 것을 상당히 확신합니다. 내 충돌 로그에서 내가 얻을 :
예외 유형 : EXC_BAD_ACCESS (SIGBUS)
예외 코드 : 0x0000000c에서 KERN_PROTECTION_FAILURE0 libobjc.A.dylib 0x000027d8 objc_msgSend + 16
1 내 0x00003120 - [ MyAppDelegate setSearchingMode : (MyAppDelegate.m : 363)
2 내 0x00003458 - [MyAppDelegate connectionDidFinishLoading : (MyAppDelegate.m : 341)
3 재단 0x00032896 - [있는 NSURLConnection (NSURLConnectionReallyInternal) sendDidFinishLoading] + 62[self setSearchingMode:NO];
나는 "HUD에 대한 속성 접근을함으로써 그것을하려고했으나 라인 주위를 얻을 수 없습니다 [MBProgressHUD의 ALLOC : + 72 내가 전화 connectionDidFinishLoading에
4 재단 0x00032818 _NSURLConnectionDidFinishLoading ] initWithWindow "- 그리고 나는 allocaing ivar을 계속하고 싶지 않다!
감사합니다, 당신의 순서로 끝날 일이 있다면 사람이 ... 여기에 더 나은 방향으로
setSearchingMode : NO는 NSURLConnection, b)와의 연결을 얻지 못하면 a) locationManager에서 didFailWithError, c) didFailWithError를 호출 한 이후로 내가 제안한대로하지 않는다는 것이 확실합니다. NSURLConnection에서, 그리고 d) connectionDidFinishLoading. 그럼에도 불구하고 어떻게 든 나는 무엇입니까? HUD 추가 = nil; 과 - 릴리스되는 중지 할 수 있습니까? 그리고 나는 그것을 내 함수 setSearchingMode에서 릴리즈했기 때문에 dealloc에서 풀어주지 않는다. : – coco
변수를 해제 한 후에'nil'으로 변수를 설정하면'release' 메시지가 가비지 메모리로 보내지는 것을 막을 수있다. (따라서'exc_bad_access' 추락). nil로 보내지는 메시지는 아무 것도하지 않지만 메시지는 효과적으로 버려지지만 할당 취소 된 객체 (유효한 객체를 가리키는 변수가 가리키는 메모리)로 보낸 메시지는 충돌을 일으킬 수 있습니다. 더 이상 유효하지 않습니다. 나는 이것이 의미가 있기를 바랍니다. – Jasarien
안녕, 나에게 새로운이야! 내가 객체를위한 메모리를 할당했다가 놓았다가 다시 놓으면 메모리 관리 문제가 생길 것이다. 그러나 객체에 메모리를 할당하고 해제 한 다음 nil로 설정하면 메모리 관리 문제없이 다시 릴리스 할 수 있습니까? – coco