Chiến lược phân bổ bộ nhớ tốt nhất cho iOS?


7

Tôi đang tranh luận về việc phân bổ bộ nhớ trên iOS. Tôi viết hầu hết mã của mình bằng C ++ và tôi thực sự thích sử dụng ObjectPool, FreeLists, v.v. Để phân bổ trước rất nhiều thứ mà tôi sẽ liên tục "cấp phát / xử lý" trong suốt quá trình chơi, (như các hạt, thực thể trò chơi, vv).

Vẫn trên iOS, không giống như chúng tôi đang phát triển cho một bảng điều khiển như PSP, nơi tôi có thể biết rằng tôi sẽ có một lượng bộ nhớ cố định. iOS, sẽ đưa ra "cảnh báo bộ nhớ" khi hệ thống cần bộ nhớ.

Có ai có một số gợi ý về điều này? Có quá nghiêm trọng vì iPod touch / iPhone 4 mới đang mang nhiều RAM hơn không? hay nó vẫn là một mối quan tâm lớn?

Câu trả lời:


10

Sử dụng ý thức quản lý bộ nhớ chung của bạn. Sử dụng nhóm / người làm việc tự do cho những thứ thường xuyên được phân bổ và phân bổ (tức là các hạt), các khối bộ nhớ miễn phí không được sử dụng. Tuy nhiên, đừng cố gắng sắp xếp trước những khối lớn của bộ nhớ. iOS không đảm bảo bộ nhớ cũng như không trao đổi, do đó, bất kỳ bộ nhớ nào bạn đã phân bổ đều lấy tài nguyên khỏi hệ thống và các ứng dụng khác. Nếu hệ thống không thể có đủ bộ nhớ vì ứng dụng của bạn đang ăn cắp tất cả, thì nó sẽ dùng đến việc giết ứng dụng của bạn. Bạn nên xử lý applicationDidReceiveMemoryWarning cho những gì nó được thiết kế cho bằng cách giải phóng càng nhiều bộ nhớ càng tốt. Mặc dù iPhone 4 có rất nhiều bộ nhớ, nhưng với tất cả các tính năng đa nhiệm và cách mọi người có xu hướng sử dụng chúng, bạn thực sự có thể có ít bộ nhớ hơn bạn nghĩ.

(Ngoài ra, đừng quên cấu hình ứng dụng của bạn để xem phân bổ bộ nhớ có phải là nút cổ chai không!)


1

Để giải quyết một ghi chú cho câu trả lời của 5ound: chú ý đến mức độ cảnh báo bộ nhớ. Trước iOS 3.2, không có cách nào để phân biệt giữa các cảnh báo về mức độ nghiêm trọng khác nhau (tức là hệ điều hành chỉ ngồi trên một loạt các UII mà nó có thể xóa hoặc thực sự không còn bộ nhớ?). trong 3.2 trở đi, bạn có thể kiểm tra mức cảnh báo bộ nhớ để xác định cách phản ứng. Theo kinh nghiệm của tôi, cảnh báo cấp 1 là không đổi, không thể tránh khỏi và phần lớn là vô nghĩa, vì vậy tôi sẽ không có hành động quyết liệt để đáp lại chúng. Mặc dù cảnh báo cấp 2 không nhất thiết là dấu hiệu của sự diệt vong sắp xảy ra, có lẽ bạn nên nghiêm túc thực hiện chúng và bắt đầu xóa bất kỳ lưu trữ nào bạn có thể, v.v.

Có một cuộc thảo luận tốt về các cấp độ khác nhau ở đây: /programming/2915247/iphone-os-memory-warnings-what-do-the-different-levels-mean

Tái bút - Đây là phần nhiều bình luận cho câu trả lời của 5ound nhưng tôi không có đủ đại diện để bình luận nên đây là lựa chọn duy nhất của tôi ...


Và để giải quyết vấn đề này: iOS 5 xử lý các cảnh báo bộ nhớ hơi khác.
David Dunham
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.