2013-10-24 11 views
10

Tôi có một bộ nhãn được đặt trong một bộ UIViews bên trong một UIScrollView. Họ chưa được chỉ định một lối thoát. Tôi đang sử dụng phông chữ Avenir Next Ultralight cho tất cả chúng, và chúng có kích thước khác nhau.Phân bổ nhãn không cố định và chiếm 8Mb bộ nhớ

Chế độ xem chính có bộ điều khiển chế độ xem đơn được lồng trong bộ điều khiển điều hướng.

Tôi chỉ chạy qua kiểm tra phân bổ và nhận thấy rằng với chế độ xem đơn này khi tải tiêu thụ khoảng 10MB bộ nhớ trong đó 8MB là các nhãn này và khi tôi chuyển sang chế độ xem tiếp theo, phân bổ đó vẫn hoạt động.

Điều gì có thể gây ra điều này?

Đây là ảnh chụp nhanh từ phân bổ ghi âm.

Snapshot Timestamp Growth # Persistent 
VM: UILabel (CALayer)  7.90 MB 10 
    0x5417000 00:02.950.428 1.23 MB 
    0x5553000 00:02.967.675 1.23 MB 
    0x568f000 00:02.978.283 1.23 MB 
    0x591d000 00:03.013.095 832.00 KB  
    0x57cb000 00:03.004.334 832.00 KB  
    0x50a7000 00:02.919.040 832.00 KB  
    0x5177000 00:02.937.076 832.00 KB  
    0x5347000 00:02.940.969 832.00 KB  
    0x52d3000 00:02.998.823 120.00 KB  
    0x52f1000 00:03.023.068 16.00 KB  

Đây là stack trace cho người đầu tiên, và phần còn lại đều giống nhau:

0 libsystem_kernel.dylib mach_vm_allocate 
    1 libsystem_kernel.dylib vm_allocate 
    2 QuartzCore CA::Render::Shmem::new_shmem(unsigned long) 
    3 QuartzCore CA::Render::Shmem::new_bitmap(unsigned int, unsigned int, unsigned int, unsigned int) 
    4 QuartzCore CABackingStoreUpdate_ 
    5 QuartzCore ___ZN2CA5Layer8display_Ev_block_invoke 
    6 QuartzCore x_blame_allocations 
    7 QuartzCore CA::Layer::display_() 
    8 QuartzCore CA::Layer::display_if_needed(CA::Transaction*) 
    9 QuartzCore CA::Layer::layout_and_display_if_needed(CA::Transaction*) 
    10 QuartzCore CA::Context::commit_transaction(CA::Transaction*) 
    11 QuartzCore CA::Transaction::commit() 
    12 UIKit -[UIApplication _reportAppLaunchFinished] 
    13 UIKit -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] 
    14 UIKit -[UIApplication handleEvent:withNewEvent:] 
    15 UIKit -[UIApplication sendEvent:] 
    16 UIKit _UIApplicationHandleEvent 
    17 GraphicsServices _PurpleEventCallback 
    18 GraphicsServices PurpleEventCallback 
    19 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ 
    20 CoreFoundation __CFRunLoopDoSource1 
    21 CoreFoundation __CFRunLoopRun 
    22 CoreFoundation CFRunLoopRunSpecific 
    23 CoreFoundation CFRunLoopRunInMode 
    24 UIKit -[UIApplication _run] 
    25 UIKit UIApplicationMain 
    26 main 
    27 libdyld.dylib start 

SOLUTION

Nghĩ rằng tôi sẽ chia sẻ làm thế nào tôi quản lý để giảm này. Nó chỉ ra rằng nếu bạn có nhãn mà bọc từ, và có một số lượng đáng kể không gian trống xung quanh hai bên, và trên và dưới, điều này thêm vào bộ nhớ cần thiết để hiển thị chúng. Vì vậy, giải pháp là giảm không gian đó xuống mức tối thiểu tuyệt đối.

Dưới đây là ảnh chụp kết quả:

Snapshot Timestamp Growth # Persistent 
VM: UILabel (CALayer)  2.37 MB 9 
    0x00 00:02.503.255 208.00 KB  
    0x5248000 00:02.474.045 392.00 KB  
    0x5087000 00:02.432.317 208.00 KB  
    0x50bb000 00:02.445.927 64.00 KB  
    0x5303000 00:02.498.137 120.00 KB  
    0x52aa000 00:02.481.354 292.00 KB  
    0x50cb000 00:02.449.625 180.00 KB  
    0x5355000 00:02.505.638 112.00 KB  
    0x50f9000 00:02.455.350 848.00 KB  
+0

Chi phí này không đánh tôi quá mức. Bạn có thể thực hiện một thử nghiệm không có nhãn không? - Ngoài ra, có phải các nhãn được tạo ra thông qua bảng phân cảnh không? – Mundi

+0

Tôi đã thử nghiệm và sử dụng bộ nhớ ít hơn 8Mb. Có, thông qua các nhãn được khởi tạo qua bảng phân cảnh. Tôi đã thực hiện một thử nghiệm khác bằng cách giảm kích thước của mỗi nhãn để loại bỏ các khu vực nơi nhãn trống. Làm điều đó chỉ với hai nhãn được quản lý để giảm nó xuống 1,5Mb. – user2916031

+0

Vì vậy, hóa ra đó là vấn đề. Không gian trống trong các nhãn đã tăng đáng kể yêu cầu bộ nhớ. Tôi đã quản lý để có được các nhãn xuống 2.4Mb. – user2916031

Trả lời

1

Tôi gặp vấn đề tương tự. Tôi sẽ thử những gì bạn đề nghị với kích thước. Tuy nhiên, có thể thay đổi màu nền từ clearColor cũng có thể khắc phục vấn đề.