2011-06-22 49 views

Trả lời

8

'dealloc' được sử dụng khi đối tượng sẵn sàng để được giải phóng (tức là khi số lượng giữ lại của đối tượng trở thành 0). Và viewDidUnload được gọi khi khung nhìn được dỡ xuống, nhưng nó có thể không được giải phóng ngay lập tức vì tham chiếu của UIViewController vẫn được lưu trữ bởi một số đối tượng khác.

sở thích cá nhân của tôi là, đối với ojbects được tạo bởi 'init', chúng được giải phóng bởi 'dealloc', đối với các đối tượng được tạo bởi 'viewDidLoad', chúng được giải phóng bởi 'viewDidUnload'.

+2

Không quá nhiều "sở thích", nhưng cần thiết. Hãy nhớ rằng '-viewDidLoad' có thể được gọi nhiều lần, mặc dù sẽ luôn có một cuộc gọi' -viewDidUnload' ở giữa. Tuy nhiên, những gì bạn tạo trong '-viewDidLoad' cũng nên được làm sạch trong' -dealloc', vì '-viewDidUnload' có thể không được gọi trước khi bộ điều khiển được deallocated. –

4

Như các tài liệu của -viewDidUnload nói:

Nó được gọi trong bộ nhớ thấp điều kiện khi bộ điều khiển xem cần để giải phóng tầm nhìn của mình và bất kỳ đối tượng liên quan đến quan điểm rằng để bộ nhớ giải phóng. Vì chế độ xem bộ điều khiển thường lưu trữ các tham chiếu đến chế độ xem và các đối tượng khác có liên quan đến chế độ xem, bạn nên sử dụng phương pháp này để từ bỏ quyền sở hữu đối tượng đó để bộ nhớ cho chúng có thể là . Bạn chỉ nên thực hiện việc này cho các đối tượng mà bạn có thể dễ dàng tạo lại sau đó, hoặc trong chế độ xem của bạnDidLoad hoặc từ các phần khác của ứng dụng của bạn. Bạn không nên sử dụng phương pháp này để phát hành dữ liệu người dùng hoặc bất kỳ thông tin nào khác không thể được không thể tạo lại được .

Thông thường, một cái nhìn khiển các cửa hàng tham khảo các đối tượng sử dụng một ổ cắm, mà là một biến hoặc tài sản mà bao gồm từ khóa IBOutlet và là cấu hình sử dụng giao diện Builder. Bộ điều khiển xem cũng có thể lưu trữ con trỏ đến các đối tượng mà nó tạo ra theo cách lập trình, chẳng hạn như trong phương thức xem viewDidLoad. Cách ưa thích để từ bỏ quyền sở hữu đối tượng bất kỳ (bao gồm cả đối tượng trong cửa hàng) là sử dụng phương thức truy cập tương ứng để đặt giá trị của đối tượng thành không. Tuy nhiên, nếu bạn không có phương thức truy cập cho một đối tượng cụ thể, bạn có thể phải giải phóng đối tượng một cách rõ ràng.

Không có đề cập đến -viewDidUnload sẽ gọi số -dealloc, bạn không nên dựa vào nó.

Các vấn đề liên quan