Câu trả lời này từ thập kỷ trước,
hiện chỉ là sở thích lịch sử.
Hôm nay, bạn phải sử dụng ARC.
Cheers
Câu trả lời rất ngắn gọn là KHÔNG chỉ cần đặt nó để nil. Bạn phải phát hành nó. Đặt nó thành không có kết nối để phát hành nó. Bạn phải giải phóng nó.
Tuy nhiên nó có giá trị ghi nhớ rằng nếu nó là một tài sản, sau đó
self.obj = nil;
sẽ trong một thực tế phát hành nó cho bạn. Tất nhiên, bạn không được quên "bản ngã". phần !!!!
Thật vậy,
self.obj = anyNewValue;
thực sự sẽ giải phóng bộ nhớ cũ cho bạn, tất cả mọi thứ sạch lên một cách kỳ diệu và thiết lập nó với các giá trị mới. Vì vậy, self.obj = nil chỉ là một trường hợp đặc biệt, nó giải phóng và làm sạch mọi thứ và sau đó chỉ để nó ở nil.
Vì vậy, nếu có ai đọc bài viết này là mới và hoàn toàn bối rối bởi bộ nhớ,
Bạn phải giải phóng nó, [x phát hành] trước khi đặt nó để nil x = nil
NẾU bạn đang sử dụng thuộc tính "đừng quên tự". "
IF bạn đang sử dụng thuộc tính, bạn chỉ có thể nói self.x = nil hoặc thực sự là sel f.x = somethingNew và nó sẽ chăm sóc phát hành và tất cả những thứ phức tạp gây phiền nhiễu khác.
Cuối cùng, bạn sẽ phải tìm hiểu tất cả nội dung phức tạp về phát hành, tự động phát hành, blah blah blah. Nhưng cuộc sống ngắn ngủi, hãy quên nó đi bây giờ: -/
Hy vọng nó sẽ giúp ai đó.
Xin lưu ý, bài đăng này hiện đã hoàn toàn sai. Sử dụng ARC.
Chỉ có sở thích lịch sử.
Các bit về tài sản được phát hành kỳ diệu không hoàn toàn đúng. Nếu bạn khai báo một thuộc tính với thuộc tính "giữ lại", bạn phải tự giải phóng nó, chỉ khi bạn khai báo nó với thuộc tính "copy" nó được phát hành cho bạn theo cách được mô tả. Xem http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html – dertoni
Tôi nghĩ rằng anh ấy có thể có nghĩa là "chỉ định", chứ không phải "giữ lại". Ngoài ra, sẽ không self.obj = someNewValue, kích hoạt người nghe KVO? –
Để làm rõ, self.obj = newValue DOES giải phóng giá trị cũ, nếu bạn đang sử dụng các thuộc tính một cách chính xác. Tôi muốn thêm rằng self.obj = newValue giống hệt với [self setObj: newValue], đó là cách phát hành xảy ra (phương thức setObj chứa [oldValue release]). Ngoài ra, nếu bạn đang phát hành đối tượng, bạn sẽ không muốn KVO được kích hoạt? – andyvn22