2012-11-13 28 views
5

Tôi có quy trình đồng bộ hóa lớn trong đó tôi tải xuống và giải nén các tệp 400-500 XML rồi phân tích cú pháp. Với dữ liệu này, Im sẽ tạo ra rất nhiều đối tượng dữ liệu lõi trên RestKit API. Lúc đầu, tôi đã có một cảnh báo bộ nhớ với byte sống 450mb + bởi vì tôi đã không sử dụng các bể tự động và chỉ cố gắng lưu dữ liệu cốt lõi vào cuối.Cảnh báo bộ nhớ trên thiết bị, không phải với Công cụ

Tôi đã khắc phục điều đó, lưu thường xuyên vào dữ liệu chính và sử dụng các khối @autoreleasepool. Khi im chạy ứng dụng của tôi ngay bây giờ với các công cụ, tôi có thể thấy cách các byte trực tiếp chỉ là 20mb-30mb, luôn giải phóng bộ nhớ và không bao giờ tăng kích thước. Quá trình này chỉ hoạt động. Nhưng khi tôi khởi động ứng dụng mà không có công cụ, sau khi xem một tập tin tôi nhận được một Memory Warning. Sau đó về sự cố ứng dụng.

Sự khác biệt giữa việc chạy ứng dụng có và không có công cụ instruments là gì? Tại sao nó kết thúc trong các kết quả khác nhau?

+2

Một điểm khác biệt thường là lược tả bằng các công cụ tạo ra bản phát hành bản phát hành, trong khi chạy qua Xcode sẽ tạo ra một bản dựng gỡ lỗi. Tuy nhiên, bạn không chắc chắn điều này có thể ảnh hưởng đến tình trạng này như thế nào. – borrrden

+3

Ví dụ: bạn có thể bật Zombies trong cấu hình gỡ lỗi nhưng không phải là cấu hình Phát hành – hooleyhoop

+0

guys - Tôi chỉ yêu nền tảng này. Tôi chỉ không biết rằng các công cụ đang sử dụng bản phát hành bản phát hành. Bởi vì đối tượng của tôi là lớn mà zombie kích hoạt là một thất bại. Khi im sử dụng bản phát hành, mọi thứ đang hoạt động như một nét duyên dáng. Xin vui lòng cho nó như một câu trả lời để tôi có thể chấp nhận nó. Bạn không biết bao nhiêu nó đã giúp tôi.Cảm ơn bạn rất nhiều :) – NDY

Trả lời

4

Tôi đang thêm câu trả lời này bởi vì tôi rất vui khi thấy trang này.

Điều gì @borrrden được đề xuất là một phần đúng. Bạn có thể định cấu hình cài đặt Xây dựng nào sẽ sử dụng khi bạn cấu hình. Để định cấu hình này, hãy goto Xcode và mở hộp thoại Chỉnh sửa lược đồ và chọn trong menu bên trái Tiểu sử XXX.app. Bạn sẽ thấy bạn có thể chọn một cấu hình xây dựng (hoặc gỡ lỗi hoặc phát hành).

enter image description here

@hooleyhoop nhận xét là rất quan trọng hơn để tìm ra giải pháp. Ngay cả khi Cấu hình Xây dựng Cấu hình của bạn được đặt thành Gỡ lỗi, vẫn có sự khác biệt giữa Cấu hình và một Chạy mặc định từ bên trong Xcode. Bạn có thể chỉ định Chẩn đoán trong phần Chạy. Ngay tại đó, có một tùy chọn được gọi là Bật đối tượng Zombie dưới Quản lý bộ nhớ. Đảm bảo rằng tùy chọn này là không được chọn.

enter image description here

Các thiết lập Chạy chẩn đoán không được sử dụng trong khi hồ sơ. Đó là lời giải thích cho hành vi bạn đang trải qua. Không có tab Chẩn đoán trên phần Tiểu sử.


Kết quả là trò chơi của tôi (Gump) bị rơi sau 5 phút không làm gì trong menu chính với Zombie Objects kích hoạt. Sau khi tôi vô hiệu hóa đối tượng Zombie, trò chơi của tôi chạy xa như tôi biết trong một khoảng thời gian vô hạn. Sau 45 phút, vẫn không có Cảnh báo bộ nhớ.

+2

Đó là bởi vì cho phép Zombies rò rỉ tất cả các đối tượng có mục đích để có thể theo dõi khi gửi tin nhắn đến các đối tượng chết. – JustSid

+0

Được rồi, đó là lý do. Tôi không chắc lắm. Cảm ơn vì điều đó. Tôi nghĩ rằng nó là cái gì đó có thể bị lãng quên một cách dễ dàng mà nó vẫn được bật. –

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