2013-02-07 41 views
5

Khi định hình một ứng dụng, tôi nhận thấy rằng các byte trực tiếp tăng khoảng 250 KB mỗi khi tôi thực hiện một số hành động nhất định (liên quan đến UIViews).XCode - Tìm hiểu về công cụ phân bổ

Tìm trong danh sách đối tượng, thủ phạm chính (đang phát triển) chỉ đọc là "malloc 144 byte".

Thỉnh thoảng tôi đã sử dụng công cụ Phân bổ để khám phá các đối tượng tôi đã giữ lâu hơn mong muốn, nhưng tôi không chắc chắn cách diễn giải các đối tượng "malloc".

Mọi hướng dẫn sẽ được đánh giá cao.

+0

Bạn có đang sử dụng dữ liệu cốt lõi không? –

+0

Không, nhưng tôi đang tải 256 UIImageViews và liên tục cập nhật các lớp của chúng. – achiral

+0

Tôi không chắc chắn, ứng dụng của tôi có một loạt các mallocs giữ lại nhưng tôi không thể làm cho cảm giác của họ, hoặc tổng số sử dụng bộ nhớ của tôi ở dưới 10 megs vì vậy tôi havent thực sự theo đuổi bất cứ điều gì nhưng id được quan tâm trong một câu trả lời là tốt. –

Trả lời

11

Một vài suy nghĩ:

  1. Phân bổ công cụ rất tuyệt vời, nhưng tôi muốn tập trung vào Leaks, đầu tiên. Bạn có hóa đơn sức khỏe sạch không?

  2. Bạn đã chạy mã của mình thông qua trình phân tích tĩnh ("Phân tích" trên menu "Sản phẩm"). Đặc biệt trong mã không phải ARC, có thể xác định nhiều vấn đề.

  3. Bạn đang sử dụng ARC? Nếu vậy, điều đó sẽ thu hẹp tìm kiếm.

  4. Bạn đã bật zombie chưa? Điều đó sẽ dẫn đến bộ nhớ không được phát hành. Hãy chắc chắn để tắt zombie.

  5. Bạn có chắc chắn rằng bạn không có chu kỳ tham chiếu mạnh (hay còn gọi là chu kỳ lưu giữ)? Bạn có thể đặt NSLog hoặc điểm ngắt trong bộ điều khiển của bạn dealloc và đảm bảo rằng bạn không có chu kỳ tham chiếu mạnh (tham chiếu vòng tròn giữa hai hoặc nhiều đối tượng không cho ra mắt). (Nếu bạn không có phương thức dealloc, chỉ cần thêm một câu lệnh với câu lệnh NSLog.) Không invalidate lặp lại NSTimer là ví dụ tuyệt vời về thứ gì đó vô tình có thể gây ra các chu kỳ tham chiếu mạnh. Vấn đề chính là bạn phải xác nhận rằng dealloc đang diễn ra.

  6. Bạn có chắc chắn bật/loại bỏ bộ điều khiển chế độ xem thay vì đẩy/trình bày một bản sao của bộ điều khiển chế độ xem khác không? (Nếu không thấy NSLog/breakpoint trong phương pháp dealloc có thể được gây ra bởi điều này, ngoài các chu kỳ tài liệu tham khảo mạnh mẽ được thảo luận trong thời điểm trước đó.)

  7. On 256 (!) Xem hình ảnh của bạn, bạn đang làm imageNamed để thiết lập image tài sản? Hình ảnh bộ nhớ cache imageNamed sẽ không giải phóng bộ nhớ cho đến khi bạn nhận được cảnh báo bộ nhớ (mặc dù nó sẽ chỉ tiêu thụ bộ nhớ khi bạn truy xuất hình ảnh mới, không truy xuất lại hình ảnh hiện có).

Tóm lại, có thể có nhiều vấn đề có thể xảy ra và không đủ câu hỏi để giúp chúng tôi chẩn đoán sự cố. Bạn phải giúp chúng tôi thu hẹp vấn đề.

Nhưng hãy bắt đầu xem xét các bộ điều khiển của bạn và đảm bảo chúng được phân phối lại như mong muốn. Tôi cảm thấy nỗi đau của bạn về các vấn đề 144 byte malloc, nhưng đó không phải là thủ phạm tiêu thụ 250kb mỗi lần. Các malloc có nhiều khả năng là một triệu chứng của một vấn đề, không phải là nguồn gốc của vấn đề, và tôi tập trung vào những điều cơ bản hơn được liệt kê ở trên, trước khi dành quá nhiều thời gian theo dõi các nguồn của các cuộc gọi malloc.

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