2012-05-08 23 views
7

Trong khi phát triển ứng dụng trong rò rỉ bộ nhớ Xcode đang xảy ra. Khi tôi kiểm tra chúng trong dạng xem chi tiết mở rộng, chúng hiển thị các phương thức khác nhau không liên quan đến triển khai thực hiện. Làm thế nào để tìm chính xác đối tượng nào bị rò rỉ và nơi nó đang rò rỉ bộ nhớ.Cách tìm chính xác nơi bộ nhớ bị rò rỉ trong dự án của iPhone

Khi ARC được bật, chúng tôi phải xử lý rò rỉ bộ nhớ hay không?

Trả lời

11

Ngay cả với ARC rò rỉ bộ nhớ có thể xảy ra, nó chỉ chèn bản phát hành và tự động phát hành trong thời gian biên dịch.

1. Bạn phải kiểm tra rò rỉ bằng cách sử dụng Build and analyze trong XCode, shift+command+b bạn nên xóa các vấn đề đó.

2. Sau đó, bạn có thể bắt đầu sử dụng các công cụ bằng cách sử dụng tùy chọn hồ sơ command+i. Điều này sẽ chỉ cho bạn nơi có thể bị rò rỉ.

Liên kết này sẽ giúp bạn quá http://soulwithmobiletechnology.blogspot.in/2011/04/how-to-check-memory-leaks-in-xcode-4.html

Edit: thêm một số ảnh chụp màn hình để hy vọng làm cho nó rõ ràng.

Trong quá trình lập hồ sơ sau khi chọn leaks hãy chọn tùy chọn call tree và chọn các hộp hide system libraries, invert call treeshow obj-c only như minh họa trong hình bên dưới.

Sau khi nhấp đúp vào tên biểu tượng bên dưới, bạn sẽ nhận được dòng bị rò rỉ. enter image description here

Bạn sẽ nhận được một cái gì đó như thế này.

enter image description here

+1

Chỉ là một điểm nhỏ, nó không "cho bạn thấy chính xác nơi rò rỉ là", bạn có thể may mắn và nói với bạn, nhưng thông thường nó chỉ nơi rò rỉ ** có thể **. – Peres

+0

mọi thứ đều ok .. nhưng khi tôi nhìn thấy khung nhìn chi tiết mở rộng, các phương thức trong chế độ xem đó không khớp với bất kỳ phương pháp dự án nào –

+0

@SAHARA, bạn đã thử xem qua hướng dẫn chưa? Màu đỏ thường chỉ vào đối tượng bị rò rỉ. Bạn có thể xem dòng đó bằng mã bằng cách nhấp đúp vào dòng đó. – iNoob

10

Có, thậm chí với ARC có rò rỉ bộ nhớ. ARC không phải là một nhà sưu tập rác, nó chỉ chèn cho bạn, tại thời gian biên dịch, giữ lại, phát hành và tự động chạy ở các vị trí chủ chốt. Vì vậy, mặc dù nó giúp nhà phát triển, bạn nên lưu ý rằng rò rỉ bộ nhớ vẫn còn tồn tại (ví dụ tham chiếu vòng tròn). Bạn có thể bắt đầu bằng cách sử dụng Máy phân tích tĩnh và sửa bất kỳ sự cố nào nó hiển thị cho bạn. Sau đó, bạn có thể truy cập Công cụ và chọn Rò rỉ.

+5

Và, tất nhiên, bạn vẫn phải tự quản lý bộ nhớ cho các đối tượng phi Objective-C (C hoặc C++). Một khu vực nữa là quên làm mất hiệu lực bộ đếm thời gian lặp lại hoặc các đối tượng được giữ lại khác trong một vòng lặp chạy (không phải là rò rỉ rõ ràng). – borrrden

+0

@JackyBoy: Bạn có thể cho tôi biết chính xác nơi rò rỉ bộ nhớ không được xử lý bởi ARC không. Ví dụ: –

+0

@MadanMohan giữ lại chu kỳ. http://stackoverflow.com/questions/7761074/arc-blocks-and-retain-cycles – Peres

Các vấn đề liên quan