Ai đó có thể giải thích sự khác biệt giữa free()
, release
, autorelease
và dealloc
?Sự khác nhau giữa miễn phí, dealloc, phát hành và tự động phát hành là gì?
Trả lời
Trong số 4 phương pháp bạn đã đề cập, bạn thường sẽ chỉ sử dụng release
và autorelease
trong mục tiêu-c. free
có thể được sử dụng khi bạn đã sử dụng c và malloc
nếu không bạn nên sử dụng release
và autorelease
.
dealloc
không được gọi bằng bất kỳ mã nào của bạn vì nó có thể ảnh hưởng đến chu kỳ lưu giữ/giải phóng mà mục tiêu-c sử dụng để theo dõi tài nguyên. Sử dụng dealloc
gần như chắc chắn sẽ dẫn đến sự cố trong thời gian chạy nếu bạn đã từng sử dụng nó.
Nguồn cuối cùng của việc sử dụng các release
và autorelease
là Apple memory management documentation
free
là đối diện củamalloc
và được sử dụng trong C. Bạn có thể sẽ không sử dụng nó rất nhiều lập trình Objective C- Nếu bạn sở hữu một đối tượng, bạn
release
khi bạn hoàn thành nó - Bạn cũng có thể
autorelease
một đối tượng. Thao tác này sẽ tự động giải phóng nó ở cuối vòng lặp chạy vòng lặp hiện tại - Khi số tham chiếu trên đối tượng giảm xuống 0, thời gian chạy cuộc gọi
dealloc
. Bạn không nên gọi phương pháp này mình
bạn "sở hữu" một đối tượng nếu bạn alloc
, new
, retain
hoặc copy
nó.
Apple cung cấp some good documentation về điều này.
free()
là hàm C mà bạn sử dụng để vứt bỏ bộ nhớ không còn cần thiết mà bạn thu được thông qua malloc()
hoặc chức năng khác được yêu cầu miễn phí() để giải quyết bộ nhớ của nó, ví dụ: strdup()
.
-dealloc
là bộ chọn Mục tiêu-C được gửi bởi thời gian chạy Objective-C đến đối tượng khi đối tượng không còn thuộc sở hữu của bất kỳ phần nào của ứng dụng.
-release
là bộ chọn bạn gửi tới một đối tượng để cho biết rằng bạn đang từ bỏ quyền sở hữu đối tượng đó. Khi một đối tượng không thuộc sở hữu của bất kỳ ai, nó được gửi thông báo -dealloc
theo thời gian chạy.
-autorelease
là bộ chọn bạn gửi tới một đối tượng để cho biết bạn đang từ bỏ quyền sở hữu đối tượng. Tuy nhiên nếu không ai sở hữu đối tượng, thì -dealloc
cuối cùng sẽ được hoãn lại cho đến khi một số điểm không xác định sau này. Trong thực tế, những gì bạn đang thực sự làm là chuyển quyền sở hữu của bạn sang một nhóm tự động phát hành sau đó sẽ phát hành nó khi bản thân nó được phát hành (hoặc thoát ra).
Bạn không được gửi -dealloc
cho một đối tượng ngoại trừ super
trong phương thức riêng của phương pháp -dealloc
của đối tượng.
- 1. Sự khác biệt giữa phát hành và tự động phát hành là gì?
- 2. Phát hành, Dealloc và tham chiếu Tự
- 3. khác biệt giữa phát hành và dealloc trong Objective-C
- 4. Tự động phát hành và phát hành
- 5. LabVIEW: Sự khác nhau giữa các hành động cơ học "Latch cho đến khi phát hành" và "Switch cho đến khi phát hành" là gì?
- 6. Sự khác nhau giữa cấu hình xây dựng "Phân phối" và "Bản phát hành" là gì?
- 7. Sự khác nhau giữa phiên bản phát hành và tích hợp là gì?
- 8. sự khác biệt giữa cống, phát hành, dealloc và giữ lại trong Objective-C/
- 9. Sự khác biệt giữa phát hành nhị phân và phát hành nguồn?
- 10. sự khác biệt giữa InterlockedCompareExchange phát hành (là gì) và Acquire()?
- 11. Xcode/Cocoa: Sự khác biệt giữa bản dựng gỡ lỗi và bản phát hành là gì?
- 12. Sự khác biệt giữa Gỡ lỗi và Phát hành trong ScriptMode ScriptManagers là gì?
- 13. Android - hành vi khác nhau trong bản phát hành đã ký được phát hành?
- 14. Sự khác nhau giữa Activity.runOnUiThread (hành động runnable) và Handler.post() là gì?
- 15. Sự khác nhau giữa kết nối đầu ra và kết nối hành động là gì?
- 16. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 17. Sự khác biệt phụ thuộc giữa Phát hành & Gỡ lỗi
- 18. 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
- 19. Sự khác nhau giữa `Enum.name()` và `Enum.toString()` là gì?
- 20. Sự khác nhau giữa root.destroy() và root.quit() là gì?
- 21. sự khác biệt giữa thiết lập một đối tượng để nil vs gửi nó nhắn phát hành trong dealloc
- 22. Bạn có phải phát hành IBOulets trong dealloc không?
- 23. Sự khác nhau giữa hệ điều hành và hạt nhân là gì?
- 24. Sự khác nhau giữa nhiều điều khoản và điều hành && trong LINQ-to-SQL là gì?
- 25. Sự khác nhau giữa UPnP AV và DLNA là gì?
- 26. Phát triển iPhone - sự khác biệt giữa phát triển và phân phối dự phòng là gì?
- 27. hành Octave -: hoạt động phát sóng tự động áp dụng
- 28. Sự khác nhau giữa Phing và PHPUnderControl là gì?
- 29. Sự khác nhau giữa [AcceptVerbs (HttpVerbs.Post)] và [HttpPost] là gì?
- 30. Sự khác nhau giữa Iterator và Máy phát điện là gì?
Điểm 3: Tôi muốn gọi nó là "lặp vòng lặp" thay vì "chạy vòng lặp". Điểm 4: Chắc chắn, bạn muốn nói "dealloc" thay vì "phát hành", phải không? (xin lỗi, nitpicking) – Dirk
Cảm ơn rất nhiều. Điều đó chắc chắn hữu ích. – ar106
@Dirk Tốt tại chỗ. Đã sửa. –