Tôi mới vào Objective-C (và stackoverflow) và tôi là một chút quay về thực tiễn tốt nhất liên quan đến tài sản.Thuộc tính trong dealloc: phát hành sau đó thiết lập để nil? hoặc chỉ đơn giản là phát hành
Sự hiểu biết của tôi là khi bạn hoàn thành xong một thuộc tính, bạn có thể tránh lỗi bằng cách giải phóng chúng và sau đó đặt ngay lập tức thành không sao cho các thông điệp tiếp theo cũng trả lại không thay vì ngoại lệ.
[myProperty release], myProperty = nil;
Tuy nhiên, khi nói đến dealloc cho thuộc tính 'sao chép' và 'giữ lại' thì có cần phải làm gì cả không? hoặc thực hiện đơn giản
[myProperty release] cắt? Ngoài ra, tôi có chính xác rằng tôi không cần phải phát hành 'gán' tài sản trong dealloc?
Cảm ơn!
+1 rằng bản phát hành là tất cả những gì bạn cần, nhưng tôi thận trọng khi sử dụng 'self.myProperty = nil' trong' dealloc '(nó có thể kích hoạt các phương thức KVO và thông báo cho các nhà quan sát để thử và truy cập một đối tượng được phân bổ một phần ...) –
Như Dave đã nói, thực hành được khuyến cáo hiện tại (bởi Apple) không sử dụng các trình truy cập để gán nil (và do đó giải phóng) trong dealloc. Nó không chỉ có thể kích hoạt các phương thức KVO, mà bộ truy cập đã đặt có thể đã bị ghi đè bởi một lớp con. – JeremyP
Cũ hơn và khôn ngoan hơn ... thực hành tốt nhất có vẻ là sử dụng self.myProperty = nil cho thuộc tính đầu ra IB trong viewDidUnload. Điều này cho phép viewController thiết lập lại hệ thống phân cấp khung nhìn nếu nó đã được tháo dỡ bởi một bộ nhớ thấp. – averydev