Tôi đang sử dụng UINavigationController để di chuyển giữa các giao diện. Khi tôi di chuyển qua lại trong chế độ xem, bộ nhớ được ứng dụng của tôi sử dụng tiếp tục tăng lên. Khi đặt các câu lệnh NSLog trong phương thức dealloc của tất cả các trình điều khiển xem, tôi nhận thấy nó đã được gọi chỉ cho một số trình điều khiển xem và không phải tất cả những gì đã được xuất hiện.iPhone - khi nào là dealloc cho một bộ điều khiển xem được gọi là?
Ví dụ, đây là chuỗi trong đó quan điểm được đẩy MainViewController -> viewcontroller1 -> viewcontroller2 -> viewcontroller3
Bây giờ trong viewcontroller3 nếu tôi làm một popToViewController: mainController, dealloc được gọi là chỉ dành cho viewcontroller3. Nó không được gọi cho viewcontroller1 và 2.
Ai đó có thể cho tôi biết lý do tại sao điều này xảy ra.
Đã tìm thấy sự cố. Phương thức dealloc không được gọi nếu bất kỳ tham chiếu nào được giữ bởi một viewcontroller vẫn còn trong bộ nhớ. Trong trường hợp của tôi, nó là đối tượng MPMoviePlayerController không được phát hành trong viewcontroller1 và viewcontroller2.
Tôi gặp chính xác cùng một vấn đề; dealloc được gọi chỉ cho bộ điều khiển thứ 3. Bạn nói "Phương thức dealloc không được gọi nếu bất kỳ tham chiếu nào được giữ bởi một viewcontroller vẫn còn trong bộ nhớ." bạn có thể xây dựng trên này? –
Bộ điều khiển xem là một đại biểu của một đối tượng vẫn đang được sử dụng. Tôi đã xóa nó khỏi làm đại biểu và sau đó nó hoạt động tốt. Đã không nhận được dealloced kể từ khi đối tượng khác tổ chức tham chiếu của nó (như là đại biểu) – lostInTransit