2013-10-24 6 views
10

मेरे पास UIViews के एक सेट के भीतर एक UIScrollView के अंदर रखे गए लेबल का एक सेट है। उन्हें आउटलेट असाइन नहीं किया गया है। मैं उन सभी के लिए एवेनिअर नेक्स्ट अल्टरलाइट फ़ॉन्ट का उपयोग कर रहा हूं, और उनके पास अलग-अलग आकार हैं।UILabel आवंटन लगातार और 8 एमबी मेमोरी लेना

मुख्य दृश्य में एक दृश्य नियंत्रक है जो नेविगेशन नियंत्रक में घोंसला है।

मैं बस आवंटन की जांच के माध्यम से चल रहा था और ध्यान दिया कि लोडिंग पर इस एकल दृश्य के साथ लगभग 8 एमबी मेमोरी खपत होती है जिसमें 8 एमबी ये लेबल होते हैं, और जब मैं अगले दृश्य में जाता हूं, तो आवंटन रहता है।

इसका कारण क्या हो सकता है?

यह आवंटन रिकॉर्डिंग से एक स्नैपशॉट है।

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  

यह पहला एक के लिए स्टैक ट्रेस है, और बाकी एक ही कर रहे हैं:

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 

समाधान

सोचा मैं साझा करेंगे कि कैसे मैं इस को कम करने में कामयाब रहे। यह पता चला है कि यदि आपके पास लेबल शब्द हैं जो लपेटते हैं, और पक्षों के चारों ओर खाली स्थान की एक बड़ी मात्रा है, और ऊपर और नीचे, यह उन्हें प्रदर्शित करने के लिए आवश्यक स्मृति में जोड़ता है। तो, समाधान उस स्थान को पूर्ण न्यूनतम तक कम करना है।

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

यह ओवरहेड मुझे अत्यधिक हड़ताल नहीं करता है। क्या आप लेबल के बिना परीक्षण कर सकते हैं? - क्या, स्टोरीबोर्ड के माध्यम से तत्काल लेबल हैं? – Mundi

+0

मैंने एक परीक्षण किया, और स्मृति उपयोग 8 एमबी कम था। हां, लेबल के माध्यम से स्टोरीबोर्ड के माध्यम से तत्काल हैं। लेबल को खाली करने वाले क्षेत्रों को हटाने के लिए प्रत्येक लेबल के आकार को कम करके मैंने एक और परीक्षण किया। ऐसा करने से केवल दो लेबलों के साथ 1.5 एमबी तक इसे कम करने में कामयाब रहा। – user2916031

+0

तो यह पता चला कि यह मुद्दा था। लेबल में खाली जगह मेमोरी आवश्यकताओं में काफी वृद्धि कर रही थी। मैंने लेबल को 2.4 एमबी तक कम करने में कामयाब रहा है। – user2916031

उत्तर

1

मैं एक ही मुद्दा हो रहा है:

यहाँ जिसके परिणामस्वरूप स्नैपशॉट है। मैं आकार के साथ सुझाए गए प्रयासों का प्रयास करूंगा। लेकिन, शायद स्पष्ट रंग से पृष्ठभूमि रंग बदलना भी समस्या को ठीक कर सकता है।

संबंधित मुद्दे