Tôi nghĩ rằng tôi gần gũi với sự hiểu biết how Mono GC and ObjC ref counting live together.Tại sao MonoTouch GC không thể xử lý các đối tượng được quản lý với refcount> 1?
Cách hoạt động là khi một đối tượng gốc có số tham chiếu là 1, chúng tôi không ngăn trường hợp được quản lý thu thập rác thải. Ngay khi số lượng tham chiếu tăng lên trên 1, chúng tôi ngăn chặn trường hợp được quản lý thu thập rác thải.
Điều này là do đối tượng được quản lý có thể chứa trạng thái người dùng. MonoTouch biết rằng cá thể không thể chứa bất kỳ trạng thái nào, vì vậy ngay sau khi không có mã được quản lý nào có tham chiếu đến cá thể được quản lý, GC có thể thu thập nó. Nếu một cá thể được quản lý được yêu cầu ở giai đoạn sau, chúng ta chỉ cần tạo một phiên bản mới.
Vì vậy, nếu tôi có thể tạo một CustomButton
mà thừa hưởng UIButton
, thêm nó như subview để View
của tôi, chúng ta hãy phiếu tham khảo được quản lý ra khỏi phạm vi và sau đó chạy GC, này được quản lýCustomButton
vẫn sẽ không đủ điều kiện cho bộ sưu tập .
Tại sao nó không thể được thu thập? Tất nhiên nó có thể được quản lý nhà nước như tài sản, nhưng nếu không có liên kết đến nó từ các đối tượng quản lý, những người quan tâm về trạng thái này? Nó cũng có thể biến mất, tại sao phải không?
Tôi đang nghĩ đến một lý do có thể: đăng ký CustomButton
sự kiện sẽ không giữ cho nó tồn tại cho GC để khi đối tượng được thu thập, các sự kiện sẽ ngừng kích hoạt. Điều này có lẽ sẽ dẫn đến hành vi bất ngờ.
Điều này có đúng không? Có lý do nào khác để giữ cho đối tượng được quản lý còn sống ngay cả khi không có ai liên kết nó?
Cuối cùng tôi đã hiểu! Hỗ trợ của bạn ở đây là không thể thiếu. –
Tôi yêu hai câu hỏi của bạn và câu trả lời tuyệt vời của Rolf - chỉ cần học một cái gì đó mới :-) –
Tôi đã chơi xung quanh với điều này. Điều gì sẽ xảy ra nếu biến myView được tạo bên trong một khối sử dụng? Công cụ công cụ chỉ ra rằng các trường hợp được phát hành. Nó cảm thấy rất khó xử, nhưng tôi không thể nhận dạng và các vấn đề trong hành vi của mã. Suy nghĩ? @rolf –