Bạn có thể lấy ngôn ngữ được gọi là Swift và đổi tên nó thành "Swift with ARC". Sau đó, bạn có thể tạo một ngôn ngữ mới có tên "Swift with GC" với cùng một cú pháp, nhưng với ít sự đảm bảo hơn về thời điểm các đối tượng được giải phóng.
Trong Swift với ARC, khi số tham chiếu bằng 0, đối tượng sẽ đi. Với bộ sưu tập rác, miễn là bạn có một tham chiếu yếu, bạn có thể gán tham chiếu yếu đó cho một tham chiếu mạnh để "phục hồi" đối tượng. (Trong Swift, một khi số tham chiếu là 0, tham chiếu yếu là không); đó là một sự khác biệt lớn
Và tất nhiên Swift với ARC đảm bảo rằng việc giết số tham chiếu cuối cùng sẽ giải phóng đối tượng ngay lập tức. Ví dụ: bạn có thể có một lớp FileWriter, nơi bạn không được phép có hai trường hợp ghi vào cùng một tệp cùng một lúc. Trong Swift với ARC, bạn có thể nói oldWriter = nil; newWriter = FileWriter (...) và bạn sẽ biết rằng FileWriter mới chỉ được tạo sau khi cái cũ bị xóa (trừ khi bạn giữ một tham chiếu khác xung quanh); trong Swift với GC điều này sẽ không hoạt động.
Một điểm khác biệt nữa là trong "Swift with ARC", các đối tượng chỉ được tham chiếu qua các chu kỳ tham chiếu mạnh, nhưng không thực sự có thể truy cập được, được đảm bảo không bị hủy bỏ.
deinit
một từ khóa và ngữ nghĩa liên quan của nó thực sự là những điều đặt tham chiếu đếm thẳng trong ngôn ngữ, chứ không phải là lĩnh vực thực hiện.