2009-07-22 8 views
5

Tôi đang tải một số UIViews vào UIScrollView và đang cố gắng theo dõi lý do tại sao chúng đang sử dụng quá nhiều bộ nhớ. Sau một quá trình loại bỏ bằng cách sử dụng các dụng cụ tôi đã phát hiện ra rằng việc thiết lập màu nền của các khung nhìn sẽ tăng mức sử dụng bộ nhớ lên 4 lần.Đặt màu nền của UIView tăng mức sử dụng bộ nhớ

Nếu tôi không đặt màu nền, mức sử dụng bộ nhớ ở khoảng 4.5megs. Ngay sau khi tôi thiết lập màu nền cho bất cứ điều gì redColor hoặc clearColor việc sử dụng bộ nhớ nhảy đến 17megs.

Đây là mã:

ThumbnailView *thumbView = [[ThumbnailView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 225.0f, 320.0f)]; 
thumbView.tag = aCounter; 
thumbView.backgroundColor = [UIColor clearColor]; 

Có ai biết những gì có thể gây ra điều này?

Điều tôi thực sự sau là có nền tảng rõ ràng. Nếu không có cách nào xung quanh việc này, có cách nào khác để thiết lập nền tảng của UIView phải rõ ràng không?

+0

Tôi có cùng một vấn đề chính xác. nếu tôi không đặt màu nền rõ ràng thì các chế độ xem sẽ xuất hiện với nền màu đen. giải pháp của bạn là gì? –

Trả lời

12

Tất cả các trường hợp của UIView (và các lớp bắt nguồn từ nó) có đối tượng CALayer được liên kết (được truy cập thông qua thuộc tính lớp) cung cấp giao diện trực quan của UIView. Các CALayer có thể có bitmap riêng của nó, nó có thể chia sẻ một bitmap với một đối tượng CALayer (đó là cách phản xạ được thực hiện), hoặc nó có thể không có bitmap.

Khi UIView hoạt động như một vùng chứa cho các điều khiển khác, nó không có bitmap liên kết với lớp của nó, do đó nó sử dụng rất ít bộ nhớ. Ngay sau khi bạn thiết lập màu nền của nó, bitmap sao lưu đó phải được tạo để có thứ gì đó hiển thị. Nếu lớp con UIView thực hiện drawRect để vẽ một số đồ họa vào khung nhìn, điều tương tự sẽ xảy ra.

Do chế độ xem có kích thước toàn màn hình tiêu tốn rất nhiều bộ nhớ, khi bạn triển khai giải pháp dựa trên UIScrollView, bạn chỉ nên tải các chế độ xem được hiển thị và hai bên. Không tạo trước số lần tải chúng.

+0

Câu trả lời này giúp tôi rất nhiều, tôi lo lắng về việc sử dụng bộ nhớ của UIView rất lớn (được sử dụng làm vùng chứa). – ideawu