찾다

 >  Q&A  >  본문

object-c - iOS 개발 시 ARC에서 메모리 릴리스 관련 문제

1페이지의 버튼을 클릭하면 2페이지로 이동합니다. 이때 메모리는 5MB 증가합니다. 그런 다음 2페이지의 버튼을 클릭하면 2페이지가 해제됩니다. 이때 2페이지의 dealloc 메소드가 실행되지만, 5MB 메모리는 해제되지 않습니다. 왜?
ARC하의 메모리도 제때 공개되는거 아닌가요?
뷰 컨트롤러나 객체가 실제로 해제되었는지 어떻게 판단해야 하나요?

참고: Xcode의 디버그 세션을 통해 메모리 사용량을 확인했습니다.

曾经蜡笔没有小新曾经蜡笔没有小新2725일 전1316

모든 응답(2)나는 대답할 것이다

  • 世界只因有你

    世界只因有你2017-07-03 11:45:05

    클래스에 다음 코드를 추가하고 클래스가 해제될 때 클래스 로그가 있는지 확인하여 이 클래스의 릴리스 상태를 판단합니다.

    으아악

    예를 들어 클래스 이름의 로그 MyViewController, 如果释放成功的话会有dealloc MyViewController.
    그런 다음 다시 디버그하여 문제의 원인을 알아보세요.

    가능한 상황:

    • 어딘가 strong 이 수업을 참고했습니다

    • block中直接使用self(应该使用__weak typeof(self) weakSelf = self,然后在block中使用weakSelf)

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-07-03 11:45:05

    1. 컨트롤러는 -(void)dealloc 메서드를 다시 작성합니다. 컨트롤러가 해제되거나 팝업될 때 메서드가 호출되는지 확인하세요.

    2. 분석을 사용하여 앱 메모리를 분석하세요

    3. xcode 버전 8.0 이상을 사용하는 경우 메모리 맵을 볼 수 있습니다.

    회신하다
    0
  • 취소회신하다