Tôi đã chuyển một số mã cũ sang mục tiêu-C ARC (Tự động tham chiếu) và dường như nó hoạt động tốt. Ngoại trừ một đối tượng cấp cao, khá lớn không bị phân phối khi nó được bật ra khỏi ngăn xếp điều hướng của tôi, khiến tôi tin rằng tôi có chu kỳ giữ chân ở đâu đó mà ARC đã ẩn khỏi tôi (hoặc ít nhất là khó theo dõi). Cách tốt nhất để loại bỏ chu trình giữ lại tiềm năng này là gì và/hoặc cách tốt nhất để xác định nguyên nhân rò rỉ bộ nhớ trong ARC là gì? Cảm ơn!Phát hiện giữ lại vòng tròn ARC
10
A
Trả lời
16
Cách tốt nhất thường là sử dụng the Leaks instrument in the Instruments app.
Các Có gì mới Trong Instruments video từ WWDC 2011 thảo luận về sử dụng dụng cụ để tìm giữ lại chu kỳ dưới ARC, bắt đầu khoảng 38 phút trong.
26
Tôi chỉ chuyển một ứng dụng cũ để sử dụng ARC. Dụng cụ cho thấy không có rò rỉ, nhưng phân bổ tiếp tục đi lên. Tôi thấy rằng bằng cách nhìn vào các vật thể trực tiếp cho một thứ mà tôi biết sẽ bị xóa, tôi đã có thể theo dõi những thứ còn lại mà không có một bản phát hành. Dưới đây là các bước cơ bản:
- Sử dụng công cụ phân bổ trong Instruments
- Chơi với ứng dụng của bạn trong một thời gian (nếu bạn biết những gì không được phát hành, điều này đi nhanh hơn)
- Change kê to Objects trong thanh nhảy Phân bổ
- Sắp xếp theo loại và tìm ra tên lớp của đối tượng chưa được phát hành của bạn
- Tìm một ví dụ sống và nhấp vào mũi tên nhỏ ngay bên cạnh địa chỉ bộ nhớ
- Bây giờ bạn có thể xem lịch sử tái tains và phát hành cho một đối tượng
0
Các vấn đề liên quan
- 1. Phát hiện va chạm vòng tròn nhanh
- 2. Giữ lại Cycle trong ARC
- 3. ARC, Chặn và giữ lại chu kỳ
- 4. để phát hiện một vòng tròn trong một hình ảnh
- 5. thực hiện mảng vòng tròn
- 6. Tại sao ARC giữ lại các đối số phương thức?
- 7. @property định nghĩa với ARC: mạnh mẽ hoặc giữ lại?
- 8. Phát hiện vòng kết nối hough android
- 9. Phát hiện xem người dùng có nhấp vào một vòng tròn
- 10. Cách nhanh nhất để phát hiện vòng tròn trong hình ảnh là gì?
- 11. Một tham chiếu vòng tròn đã được phát hiện trong khi xuất một đối tượng kiểu
- 12. làm thế nào để phát hiện trung tâm của một vòng tròn mờ với opencv
- 13. Thêm vòng tròn khung tròn trên bitmap tròn
- 14. Tương đương với '[[giữ gìn] autorelease]' trong ARC là gì?
- 15. ProgressDialog quay vòng tròn
- 16. Vòng tròn vẽ iOS
- 17. Đối tượng mô hình CoreData trong ARC sử dụng giữ lại
- 18. Lỗi khi thực hiện nhập tham chiếu vòng tròn
- 19. Vẽ một vòng tròn trên một hình ảnh hiện có
- 20. vòng tròn Vẽ với System.Drawing
- 21. iOS và ARC: Cách giữ lại bản thân trong các hoạt động không đồng bộ?
- 22. OpenCV: Phát hiện các đốm tròn/ổ đĩa Domino
- 23. Phát hiện số vòng trong PHP?
- 24. Một tham chiếu vòng tròn đã được phát hiện trong khi sắp xếp một đối tượng thuộc kiểu System.Globalization.CultureInfo
- 25. Crop trong vòng tròn (php)
- 26. Làm sống động một tỷ lệ trên một vòng tròn để giữ lấy vị trí
- 27. Tại sao các biến __block không được giữ lại (Trong môi trường không phải ARC)?
- 28. Canvas arc() vs drawImage()
- 29. thu rác và tham chiếu vòng tròn
- 30. Dự đoán va chạm vòng kết nối vòng tròn
vẻ như tôi đã tìm thấy nó! Đã có một tham chiếu khối được __unsafe_unretained; thay đổi nó thành __weak __block cho lols và dường như đã sửa nó. LƯU Ý: Dụng cụ DID KHÔNG TÌM KIẾM NÀY và thực sự không đánh dấu điều này là một tình huống rò rỉ tiềm tàng. Cảm ơn bạn đã đề xuất! – Grimless
Rất tiếc, sau khi thêm một số lần đào, hóa ra lỗ rò vẫn còn xung quanh. Nhưng nó chỉ rò rỉ khi tôi đẩy nó vào ngăn xếp chuyển hướng ... Nếu tôi sử dụng -init hoặc -initWithNibName: bundle :, và sau đó nil nó là tài liệu tham khảo, nó deallocates một cách chính xác. Nếu không, khi tôi đẩy nó trên một ngăn xếp chuyển hướng và sau đó bật nó, nó không bao giờ deallocates. – Grimless