[bất kỳ số lượng] hình ảnh nào thực sự không phải là vấn đề trên iOS vì có hệ thống bộ nhớ đệm nâng cao được đặt đúng chỗ để chăm sóc việc sử dụng lại hình ảnh. Ngoài ra hệ thống rendering của iOS là khá tuyệt vời, do đó bạn không phải lo lắng về nó.
Mặc dù có thể lập trình hệ thống cho sprites, tôi sẽ không khuyên bạn làm điều đó. Phương pháp này chủ yếu được sử dụng trong Phát triển Web (vì mỗi hình ảnh phải được phục vụ với yêu cầu mới * chú thích no longer true with HTTP/2) và rõ ràng là để phát triển trò chơi (vì kết cấu ít ràng buộc gọi bạn càng tốt).
Có một ví dụ hay về lý do không sử dụng sprites - nếu bạn đang phát triển ứng dụng Xem và bạn muốn làm hoạt ảnh, bạn làm điều đó thông qua hình ảnh kiểu bảng lật (chuỗi ảnh có tên là 1.png - 100.png) và không phải bằng cách sử dụng bản đồ lớn của hình ảnh. Trong khi nó sẽ được đoán là tại sao họ quyết định làm theo cách đó (tôi đoán là vì nó hoạt động tốt như thế nào trong nội bộ + thông lượng của bluetooth), rõ ràng rằng nó cũng là lựa chọn ưa thích của Apple và vì vậy chúng ta nên làm theo .
Đối với iOS, có một số cạm bẫy mà bạn nên biết:
- Bất kỳ hình ảnh được tải từ trang Web không nên nạp vào chủ đề chính, như vậy thực sự đi với tất cả các hình ảnh đó không phải là mặt tại tải của màn hình (hình ảnh trong UITableViewCell là ví dụ tuyệt vời, bởi vì bạn có thể thấy mini đóng băng nếu hình ảnh lớn khi bạn cuộn qua)
- Nếu bạn có nhiều lớp, hình ảnh với kênh alpha! = 1 giảm hiệu suất rất nhiều (nhưng thường không thể tránh khỏi)
- Hình nền được tạo với
UIColor.colorWithPatternImage()
phải b e sử dụng một cách thận trọng, vì phương pháp này được coi là có vấn đề (details here)
Bây giờ như đối với tải không đồng bộ của các hình ảnh, tôi đề nghị bạn hãy nhìn vào thư viện sau:
Cả hai đều lớn nên nó thực sự là vấn đề sở thích (tôi thích Haneke Bett er), nhưng chúng cho phép bạn tải hình ảnh về các chủ đề khác nhau, có thể là từ Web hoặc từ gói của bạn. Họ cũng có phần mở rộng cho UIImageView cho phép bạn sử dụng chức năng 1 dòng để tải tất cả hình ảnh một cách dễ dàng.
Hy vọng điều đó sẽ hữu ích!
Nguồn
2015-07-30 05:55:31
100 100x100 hình ảnh không phải là nhiều bộ nhớ. Giả sử tất cả được nạp vào, đó là (100 * 100 * 100 * 4) byte bộ nhớ khi được giải mã, chỉ có 4MB. UIKit sẽ xử lý việc sao chép tài nguyên của bạn, cũng như lưu vào bộ nhớ đệm/giải phóng chúng trong môi trường bộ nhớ thấp, vì vậy tôi nghĩ đây chỉ là tối ưu hóa sớm. –
Richard là đúng trong số lượng bộ nhớ không phải là quá xấu, nhưng nếu bạn thực sự cần thiết, bạn có thể làm cho những hình ảnh thành một sprite duy nhất và sau đó gọi nó bằng cách sử dụng coords. Tôi đã sử dụng trang web này trước đây để tạo CSS Sprite http://spritegen.website-performance.org – Cole
@Cole không tốt cho hiệu suất trên iOS - mức tăng bạn nhận được cho địa phương bộ nhớ cache là tối thiểu và như tôi đã đề cập trước UIKit thực hiện một số kỹ thuật lưu trong bộ nhớ đệm nâng cao để đảm bảo rằng chỉ những hình ảnh được sử dụng được lưu lại trong bộ nhớ tại bất kỳ thời điểm nào. Ngoài ra, hình ảnh trên 1024x1024 hoạt động rất kém trên các thiết bị cũ hơn (do giới hạn phần cứng trong bộ đệm kết cấu, hình ảnh phải được UIKit lát gạch). –