cập nhật, chính xác trả lời
câu trả lời ban đầu của tôi là sai và tôi chân thành xin lỗi. Tôi sẽ để lại tất cả những lời bình luận và thông tin vượt trội của tôi để cho sự xấu hổ có thể mãi mãi nhắc nhở tôi đừng bao giờ tin tưởng bất cứ điều gì Adobe nói lại. Tài liệu hiện tại hiện tại cho biết:
"Nếu bạn không còn cần trình xử lý sự kiện, hãy xóa nó bằng cách gọi removeEventListener() hoặc các vấn đề về bộ nhớ có thể xảy ra. Bộ nghe sự kiện sẽ không tự động bị xóa khỏi bộ nhớ vì trình thu thập rác không loại bỏ người nghe miễn là đối tượng gửi tồn tại (trừ khi tham số useWeakReference được đặt thành true). "
Lưu ý rằng trình nghe sự kiện LÀ thời tiết thu thập rác có tham chiếu yếu hoặc không, miễn là đối tượng gửi đi được xóa trước tiên. Vì vậy, trong cả hai trường hợp này, chúng sẽ không bao giờ gây ra rò rỉ bộ nhớ. Tôi yêu cầu OP hủy kiểm tra câu trả lời của tôi là chính xác và đưa ra câu trả lời tín dụng/chính xác + upvotes để @Malyngo.
gốc (sai) trả lời và (mis) Thông tin Làm theo
Cả hai sẽ. Việc ràng buộc một trình nghe sự kiện sẽ tạo ra một tham chiếu mạnh mẽ đến đối tượng ban đầu, và do đó bộ thu gom rác sẽ không làm sạch nó. Bạn cần phải loại bỏ các trình lắng nghe sự kiện một cách rõ ràng hoặc chỉ định chúng như là các tham chiếu yếu, mà nên là một trong các tham số của addEventListener.
Đối với những người cho rằng người nghe sẽ không ngừng các đối tượng khác không bị thu gom rác thải
http://gingerbinger.com/2010/07/actionscript-3-0-events-the-myth-of-useweakreference/
Tóm tắt thông tin của bài viết:
"Hãy tưởng tượng rằng người chơi của chúng tôi chết, và chúng tôi muốn cậu ấy Tuy nhiên, trình nghe sự kiện sẽ tạo một tham chiếu từ giai đoạn đến trình phát. Giai đoạn này là đối tượng hiển thị trên cùng và luôn có thể truy cập được.Vì vậy, khi quá trình quét đánh dấu chạy, trình xử lý sự kiện này cho phép bộ thu gom rác hop fr bỏ qua giai đoạn cho đối tượng trình phát của chúng tôi, ngay cả khi chúng tôi đã xóa tất cả các tham chiếu khác và xóa nó khỏi danh sách hiển thị. "
Vì vậy, vẫn có ít nhất một trường hợp trong đó người nghe sự kiện một mình, bị ràng buộc mạnh mẽ, có thể ngăn không cho đối tượng bị thu thập.
Giải pháp thực hành tốt nhất:
1) Xóa khỏi danh sách hiển thị.
2) Nếu đó là MovieClip, hãy yêu cầu dừng lại().
3) Xóa mọi trình xử lý sự kiện mà đối tượng đã tạo.
4) Xóa mọi tham chiếu trong đối tượng mẹ bằng cách đặt chúng thành rỗng.
Cập nhật lần nữa
Một rò rỉ bộ nhớ không có nghĩa là bạn sẽ thấy bộ nhớ ứng dụng liên tục phát triển. Một rò rỉ bộ nhớ cũng có thể chỉ đơn giản là mô tả bộ nhớ được phân bổ và tồn tại trong suốt vòng đời của ứng dụng, khi nó được tái chế. Một cái gì đó giống như mã kiểm tra này sẽ không dễ dàng phát hiện được. Nhưng làm cho điều này xảy ra N lần hơn một giờ trò chơi dài và tôi đảm bảo với bạn nó sẽ hiển thị. Tôi đã có tình huống tương tự xảy ra với một thuật toán mã hóa tôi đã viết một lần. Sau một thời gian, ứng dụng của tôi bắt đầu chugging với tốc độ 10 khung hình/giây, vì VM đã ăn hết một tấn bộ nhớ mà nó không thực sự sử dụng nữa nhưng nó vẫn đang quản lý nó.
Không gây ra rò rỉ bộ nhớ tại thời điểm này vì bạn có thể yêu cầu tất cả 1000 movieclips có thể nhấp được.Đó là chỉ khi bạn đã làm với movieclips và muốn loại bỏ chúng khỏi bộ nhớ mà vấn đề nghe sự kiện đi vào để chơi. Câu trả lời của Ascention là chính xác nhưng từ 'sẽ' là quan trọng. – crooksy88
Mọi người ở đây, tôi đã sửa chữa. Tôi sẽ không bao giờ tin vào tài liệu adobe nữa. Xem câu trả lời cập nhật của tôi. Câu trả lời hiện tại của tôi là sai. –