में एक दृश्य को अनदेखा करना बहुत धीमा है, मूल प्रश्न के बाद अधिक संक्षिप्त और केंद्रित प्रश्न के साथ दोबारा अनुत्तरित किया गया। शोध के एक और दिन के बाद समस्या में और अधिक अंतर्दृष्टि जोड़ना:CTCallCenter callEventHandler
मेरे ऐप प्रतिनिधि (didFinishLaunching) में, मैंने CTCallCenter पर एक कॉलइवेंट हैंडलर स्थापित किया। विचार यह है कि जब कॉलस्टेट बदलता है, तो मैं userInfo dict के साथ एक कॉलम.callState युक्त अधिसूचना पोस्ट करता हूं। मेरे विचार में, मैं इस अधिसूचना का निरीक्षण करता हूं, और जब उपयोगकर्ताइन्फो निर्देश में CTCallDisconnected का मान होता है, तो मैं एक दृश्य को अनदेखा करना चाहता हूं।
मेरी समस्या यह है कि अनदेखी पहलू, लगभग लगातार ~ 7 सेकंड ले रहा है। बाकी सब कुछ ठीक काम कर रहा है, और मुझे यह पता है क्योंकि मैं बिना किसी छिपाने से पहले और बाद में एनएसएलॉग, और उन लॉग तुरंत दिखाई देते हैं, लेकिन धूमिल दृश्य अभी भी 7 सेकंड के लिए है।
यहाँ मेरी कोड है:
appDidFinishLaunching:
self.callCenter = [[CTCallCenter alloc] init]; self.callCenter.callEventHandler = ^(CTCall* call) { // anounce that we've had a state change in our call center NSDictionary *dict = [NSDictionary dictionaryWithObject:call.callState forKey:@"callState"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"CTCallStateDidChange" object:self userInfo:dict]; };
जब कोई उपयोगकर्ता एक बटन है कि एक फ़ोन नंबर डायल करता टैप करता मैं तो इस सूचना के लिए सुनने:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ctCallStateDidChange:) name:@"CTCallStateDidChange" object:nil];
फिर, ctCallStateDidChange में :
- (void)ctCallStateDidChange:(NSNotification *)notification { NSLog(@"121"); NSString *callInfo = [[notification userInfo] objectForKey:@"callState"]; if ([callInfo isEqualToString:CTCallStateDisconnected]) { NSLog(@"before show"); [self.view viewWithTag:kNONEMERGENCYCALLSAVEDTOLOG_TAG].hidden = NO; NSLog(@"after show"); } }
मैं इस समस्या ट्रैक करने के बाद उपरोक्त कोड नमूने में अगर हालत के लिए नीचे:
if ([[userInfo valueForKey:@"userInfo"] valueForKey:@"callState"] == CTCallStateDisconnected) {
अगर मैं बस के साथ कि बदल देते हैं:
if (1 == 1) {
तब दृश्य तुरंत दिखाई देता है!
बात यह है कि, एनएसएलओजी स्टेटमेंट तुरंत लॉगिंग कर रहे हैं, लेकिन दृश्य इसके अनदेखी में लगी हुई है। यह स्थिति तुरंत निष्पादित करने के लिए ब्लॉक का केवल एक हिस्सा क्यों हो सकती है, और शेष ~ 7 सेकंड प्रतीक्षा करें?
धन्यवाद!
छिपाने/प्रकट करने की प्रक्रिया बहुत तेज है। समस्या आपके दृश्य की सामग्री और इसके पर्यवेक्षण के साथ है। क्या आपने उपकरण के साथ मामले को प्रोफाइल करने की कोशिश की है? पोस्ट कोड जहां आप दृश्य को कॉन्फ़िगर करते हैं जो छुपाएगा और देखेंगे छुपाए जाने के बाद इसका खुलासा किया जाएगा। – Zapko
धन्यवाद। बस मेरी मूल पोस्ट अपडेट की गई। दृश्य में छवि 4 केबी है, इसलिए मुझे नहीं लगता कि यह एक समस्या है। मैंने बस छवि को छोड़ने की कोशिश की, और अभी भी अंतराल है। उपकरणों से बहुत परिचित नहीं है। केवल उस उपकरण के माध्यम से मेमोरी लीक को वास्तव में देखा है, इसलिए यह भी सुनिश्चित नहीं है कि मैं दृश्यों के पीछे क्या हो रहा हूं इसका निरीक्षण करता हूं। – djibouti33
समय प्रोफ़ाइल का उपयोग करें, यह आपको हर पल पर कॉल स्टैक दिखाएगा और प्रत्येक कार्य कितनी देर तक काम करेगा। यह निश्चित रूप से आपकी मदद करेगा – Zapko