1페이지의 버튼을 클릭하면 2페이지로 이동합니다. 이때 메모리는 5MB 증가합니다. 그런 다음 2페이지의 버튼을 클릭하면 2페이지가 해제됩니다. 이때 2페이지의 dealloc 메소드가 실행되지만, 5MB 메모리는 해제되지 않습니다. 왜? ARC하의 메모리도 제때 공개되는거 아닌가요? 뷰 컨트롤러나 객체가 실제로 해제되었는지 어떻게 판단해야 하나요?
참고: Xcode의 디버그 세션을 통해 메모리 사용량을 확인했습니다.
클래스에 다음 코드를 추가하고 클래스가 해제될 때 클래스 로그가 있는지 확인하여 이 클래스의 릴리스 상태를 판단합니다.
예를 들어 클래스 이름의 로그 MyViewController, 如果释放成功的话会有dealloc MyViewController. 그런 다음 다시 디버그하여 문제의 원인을 알아보세요.
MyViewController
dealloc MyViewController
가능한 상황:
어딘가 strong 이 수업을 참고했습니다
strong
재block中直接使用self(应该使用__weak typeof(self) weakSelf = self,然后在block中使用weakSelf)
block
self
__weak typeof(self) weakSelf = self
weakSelf
컨트롤러는 -(void)dealloc 메서드를 다시 작성합니다. 컨트롤러가 해제되거나 팝업될 때 메서드가 호출되는지 확인하세요.
-(void)dealloc
분석을 사용하여 앱 메모리를 분석하세요
xcode 버전 8.0 이상을 사용하는 경우 메모리 맵을 볼 수 있습니다.
클래스에 다음 코드를 추가하고 클래스가 해제될 때 클래스 로그가 있는지 확인하여 이 클래스의 릴리스 상태를 판단합니다.
으아악예를 들어 클래스 이름의 로그
MyViewController
, 如果释放成功的话会有dealloc MyViewController
.그런 다음 다시 디버그하여 문제의 원인을 알아보세요.
가능한 상황:
어딘가
strong
이 수업을 참고했습니다재
block
中直接使用self
(应该使用__weak typeof(self) weakSelf = self
,然后在block中使用weakSelf
)컨트롤러는
-(void)dealloc
메서드를 다시 작성합니다. 컨트롤러가 해제되거나 팝업될 때 메서드가 호출되는지 확인하세요.분석을 사용하여 앱 메모리를 분석하세요
xcode 버전 8.0 이상을 사용하는 경우 메모리 맵을 볼 수 있습니다.