2012-09-21 42 views
5

Gần đây tôi đã gặp phải một số vấn đề về quản lý bộ nhớ trong ứng dụng của mình.Sử dụng bộ nhớ cực cao - Cách xử lý ảnh lớn trên iPad?

Ứng dụng này có lợi thế của một số hình ảnh chất lượng cao và điều này cực kỳ tăng mức sử dụng bộ nhớ.

Dưới đây là một số thông tin về dự án và hình ảnh chi tiết để làm vấn đề này rõ ràng hơn:

  • Có khoảng 90 hình ảnh được bổ sung vào dự án của tôi. Một nửa trong số đó được thiết kế với kích thước @ 2x để hỗ trợ Màn hình Retina iPad mới. Do đó, số lượng hình ảnh tối đa cho mỗi thiết bị là khoảng 45.

  • Tổng kích thước của phiên bản Retina của tất cả các hình ảnh là khoảng 25 KB (Kích thước của mỗi hình ảnh khác nhau dao động từ 10 KB đến 6.8 MB). Trong khi đó, kích thước của tất cả các hình ảnh tiêu chuẩn bằng 11 MegaBytes.

  • Kích thước lưu trữ XCode của dự án bằng 44 MB.

  • Độ phân giải tối đa hình ảnh đơn sắc trong phiên bản hình ảnh chuẩn là khoảng 1500x4000 px trong khi tối thiểu là khoảng 60x60 px.

  • Độ phân giải tối đa hình ảnh đơn sắc trong phiên bản Retina của hình ảnh là khoảng 3000x8000 px trong khi tối thiểu là khoảng 120x120 px.

  • Phiên bản hình ảnh võng mạc có hậu tố "@ 2x ~ ipad" trong tên của chúng trong khi hậu tố tên cho những người khác là "~ ipad".

  • Chỉ có một ví dụ về hầu hết các hình ảnh được tạo trong vòng đời của ứng dụng.

  • Khoảng 25 hình ảnh được tải trong khi khởi chạy ứng dụng và phần còn lại được tải trong khi chơi.

  • Tôi đã sử dụng [UIImage imageNamed: @ "image_name.png"] ở bất cứ đâu tôi muốn tải hình ảnh (sử dụng [hình ảnh UIImageWithContentsOfFile] và [UIImage imageWithData] cực kỳ không hiệu quả).

Nhưng ở đây là có vấn đề:

Khi tôi theo dõi việc sử dụng bộ nhớ sử dụng dụng cụ tôi thấy rằng việc sử dụng bộ nhớ của ứng dụng là rất cao. Dưới đây là số liệu thống kê của của cấp phát bộ nhớ trong các tình huống khác nhau:

  • phân bổ bộ nhớ trên thiết bị iPad 2 sử dụng hình ảnh tiêu chuẩn lúc khởi động: 58 MB

  • phân bổ bộ nhớ trên thiết bị iPad 2 sử dụng hình ảnh tiêu chuẩn trong gameplay (khi tất cả hình ảnh được nạp): 131 MB

  • phân bổ bộ nhớ trên New iPad sử dụng hình ảnh Retina lúc khởi động: 211 MB
  • phân bổ bộ nhớ trên New iPad sử dụng hình ảnh Retina trong gameplay (khi tất cả các hình ảnh được nạp): 470 MB

Bất kỳ ý tưởng nào tại sao bộ nhớ được phân bổ cao hơn rất nhiều so với tổng kích thước hình ảnh?

+0

Tại sao bạn tải tất cả hình ảnh trong bộ nhớ? Bạn nên tránh sử dụng hình ảnh UIImageNam, và thay vì sử dụng hình ảnh UIImageWithContentsOfFile, vì sau này không tải hình ảnh vĩnh viễn trong bộ nhớ .... Ngoài ra nếu hình ảnh của bạn là rất lớn, bạn nên vẽ chúng trong một lớp CATiledLayer, để nó rút ra chúng hiệu quả hơn với màn hình – Lefteris

+0

Tôi đang tải tất cả hình ảnh trong bộ nhớ vì tất cả chúng đều cần thiết trước và trong khi chơi trò chơi. Thiết bị không theo thiết kế thông thường như các ứng dụng khác và bắt buộc phải tải những hình ảnh đó. Nói cách khác, tôi chỉ nạp mỗi ảnh khi cần thiết, nhưng vấn đề là nó cần thiết cho tất cả chúng khi được khởi động: D –

Trả lời

0

Điều này có thể do hình ảnh bạn sử dụng được nén bằng png hoặc jpg và khi được giải mã thành bộ nhớ có kích thước lớn hơn nhiều so với kích thước tệp ban đầu. Nó sẽ mất một cái gì đó như chiều rộng * chiều cao * 4 byte bộ nhớ không có vấn đề nội dung hình ảnh.

+0

Có phương pháp nén nào khác hoặc bất kỳ phần mở rộng nào khác mà tôi có thể sử dụng để ngăn không sử dụng bộ nhớ lớn như vậy? –

0

một sự khởi đầu sẽ được không sử dụng -[UIImage imageNamed:] cho những hình ảnh đó phù hợp với bất kỳ trình độ:

  • lớn cỡ
  • vừa
  • "... chỉ một ví dụ ... được tạo ra trong ứng dụng vòng đời."

nhưng bạn cần chú ý đến những thay đổi đó ảnh hưởng đến chương trình của bạn như thế nào. bạn hiện đang dựa vào bộ nhớ bất cứ khi nào có thể. những gì tôi đang đề xuất là chuyển một số trách nhiệm đó sang các lĩnh vực khác. phân phối tải để nó vẫn cảm thấy nhanh, nhưng có sự cân bằng tốt hơn về tài nguyên. khi bạn sử dụng ít bộ nhớ đệm hơn, bạn sẽ nhận thấy rằng bạn có thể sẽ đọc và mở rộng một số tệp nhiều lần. sau đó cố gắng tìm ra nơi bạn nên chia sẻ hình ảnh bạn tải. tất nhiên, chỉ tải những gì bạn cần. sau đó lấy những gì bạn học và thấy nó có thể được áp dụng cho phần còn lại của hình ảnh của bạn.

cũng, chia nhỏ hình ảnh của bạn - bạn có hình ảnh lớn hơn vài lần kích thước của màn hình. nếu chúng cần kích thước đó, hãy chia nhỏ chúng ra - nếu chúng chỉ được thu nhỏ khi được trình bày, sau đó thay đổi kích thước chúng trước khi phân phối (ví dụ như chúng không yêu cầu mở rộng - sẽ nhanh hơn nhiều để hiển thị, trông đẹp hơn nhiều, và tiêu thụ ít bộ nhớ hơn).

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