Tôi có một mã rất đơn giản để hiển thị một bộ điều khiển phương thức (nextController là thành viên lớp):Sử dụng dismissModalViewControllerAnimated sẽ không giải phóng bất kỳ bộ nhớ
nextController = [[InstructionsScreen alloc] initWithNibName:@"InstructionsScreen" bundle:nil];
[self presentModalViewController:nextController animated:YES];
[nextController release];
Và sau đó khi bộ điều khiển nên ẩn:
[self dismissModalViewControllerAnimated:YES];
nextController = nil;
Tất cả các công trình tốt như mong đợi, nhưng khi tôi chạy công cụ phân bổ đối tượng nó cho thấy rằng sau khi loại bỏ bộ điều khiển phương thức bộ nhớ nó được phân bổ không được giải phóng. Điều này trở thành một vấn đề bởi vì khi tôi hiển thị một số bộ điều khiển bộ nhớ đã hết ...
Ai đó có thể cho tôi một số manh mối không? Clang không thấy bất kỳ vấn đề gì, vì vậy tôi bị mắc kẹt trong giới hạn bộ nhớ, bởi vì bộ nhớ của các bộ điều khiển bị loại bỏ sẽ không được phát hành.
EDIT: Điều tôi khám phá ra bây giờ là nó dường như bị rò rỉ ở đâu đó trong nội dung của Apple. Cách tái tạo: XCode -> tạo dự án mới với mẫu "Ứng dụng tiện ích". Đừng tự viết mã. Chỉ cần tạo một ứng dụng tiện ích mới và chạy nó với "Phân bổ đối tượng", chọn để xem "Tạo & Vẫn đang sống". Bây giờ lật bộ điều khiển phương thức vài lần - bạn sẽ thấy bộ nhớ được phân bổ chỉ phát triển và phát triển mỗi khi bộ điều khiển phương thức xuất hiện và khi nó biến mất quá ...
Như tôi đã nói nextController là thành viên, không phải là thuộc tính: @interface MainScreenViewController: UIViewController { id nextController; } sử dụng "phát hành" thay vì gán nextController thành "nil" dẫn đến ngoại lệ: chế độ xem thưDidDisappear: được gửi tới đối tượng được giải phóng. Đối tượng dường như được giải phóng, tuy nhiên công cụ phân bổ đối tượng "được tạo và vẫn còn sống", chỉ hiển thị việc sử dụng bộ nhớ ngày càng tăng. –