Memory Leak Là Gì

  -  
Posted by
*
Khi khởi chế tạo object

var reference2 = referenceOneSau khi tiến hành câu lệnh trên, chúng ta tạo 1 link mạnh cho tới object Person bằng vấn đề gán địa chỉ cửa hàng sang reference2. Như chúng ta thấy sinh hoạt hình sau, trở nên count = 2 vì 2 thằng cùng chũm giữ showroom này.

*

reference2 = nilTương tự, bọn họ bỏ tham chiếu strong tới trở thành reference2 và hiện tại biến count = 0.

Bạn đang xem: Memory leak là gì

Như vậy object đang tạo không hề ai tham chiếu, ARC đã xóa thoát ra khỏi bộ nhớ. Đấy là cách mà ARC làm cho việc.

Thế trên sao bộ lưu trữ lại rò rỉ?

Như họ hiểu ARC sẽ tự động xóa trở thành khỏi bộ lưu trữ khi count = 0, tuy thế vì tại sao nào đó mà count không bao giờ = 0 được, phải không giải phóng được bộ nhớ. Hãy tham khảo tiếp nhé!

Khi nào ARC nỗ lực kiểm tra count của một biến RC(reference count)

Khi bạn làm việc với cocoa hay cocoa cảm biến thì dễ dàng là nó kiểm tra khi một hàm thoát ra khỏi vòng lặp bên trên thread. Khí cụ kiểm tra như sau:

Nếu không một ai tham chiếu cho tới 1 object thì ARC giải phóngNếu 1 object không tồn tại tham chiếu mạnh bạo tới nó.

Sau đây là ví dụ chũm thể:

*

user?.todo = todo //2 tham chiếu táo bạo tới todotodo?.associatedUser = user// 2 tham chiếu khỏe mạnh tới user2 câu lệnh trên vận động như sau:

Tăng RC của todo lên 2, todo gồm 2 công ty sở hữu, 1 lần tạo nên và 1 lần gán.Tăng RC của user lên 2, giống như như trên.

Xem thêm: Cách Luyện Khinh Công Tại Nhà, Luyện Tập Khinh Công Tại Nhà Dành Cho Người Mới

*

Giải pháp

Có 2 giải pháp, sử dụng tham chiếu yếu ớt weak hoặc tham chiếu unowned.

Sửa lại code như sau:

*

user?.todo = todo //RC = 2 cho tới todotodo?.associatedUser = user //RC = 1 cho tới userRC = 2 tham chiếu khỏe mạnh tới todo, còn user có RC = 1 vị associatedUser là tham chiếu yếu.

user = nilCâu lệnh có tác dụng RC của user về 0.

*

todo = nilLúc này todo tất cả RC = 0 cùng bị xóa sổ bộ nhớ.

Xem thêm: Bản Đồ Luyện Công Võ Lâm 1, Địa Điểm Train Lv Nhanh Từ 1, Bản Đồ Luyện Công Võ Lâm 1, Map Train Vltk1 Nhanh

Quy tắc: khi 2 đối tượng tham chiếu cho nhau thì biến tham chiếu về bên weak hoặc unowned.

Memory Leaks vào Closure

Memory Leak in Closure = self refers khổng lồ → object refers khổng lồ → selfClosure là một hàm được tạo nên từ phía bên trong một hàm không giống (hàm cha), nó rất có thể sử dụng những biến toàn cục, biến cục bộ của hàm phụ vương và biến tổng thể của chính nó. Và khi thực hiện thì nó capture(chụp lấy) những biến tốt hằng cùng ném vào vào scope của nó.

Thế làm sao là capturing?

*

Cách hoạt động:

Chúng ta chế tạo ra 2 biến chuyển a,b với 2 giá chỉ trị không giống nhau 20 với 30. Bọn họ tạo hà someClosure với captures a, b bởi vì tham chiếu mạnh.Khi cách tiến hành someMethodThatTakeClosure hotline closure cùng nó đã trả về 2 cực hiếm tổng của a, b captures trường đoản cú hàm viewDidLoad. Quý hiếm là 50

Chúng ta cùng phân tích trong bài viết tiếp theo: