यह की तर्ज पर आईओएस विकास सलाह को देखने के लिए असामान्य नहीं है: उद्देश्य-सी में नामकरण ब्लॉक?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// work in background
NSLog(@"%s work", __PRETTY_FUNCTION__);
dispatch_async(dispatch_get_main_queue(), ^{
// update UI on main queue
NSLog(@"%s updateUI", __PRETTY_FUNCTION__);
});
});
यह महान है, लेकिन यह डिबग करने के लिए कठिन हो सकता है जब कुछ गलत हो जाता। उत्पादन को देखते हुए:
AppName[1051:4013] __47-[Classname methodName]_block_invoke_0 work
AppName[1051:907] __block_global_0 updateUI
पहले लॉग लाइन वर्ग और विधि के नाम है तो हम बाहरी ब्लॉक में एक मुद्दा (उम्मीद है कि हम उस विधि में कई ब्लॉक परिभाषित नहीं किया है) पर नज़र रखने की कुछ उम्मीद है, लेकिन दूसरी लॉग-लाइन (आंतरिक ब्लॉक से)? शुभकामनाएं, खासकर अगर आपने इस ऐप को अपने ऐप में बहुत कुछ इस्तेमाल किया है।
वहाँ एक रास्ता ब्लॉक के नाम जो हमें सांत्वना उत्पादन और दुर्घटना लॉग में उनके स्रोत पहचान कर सकते हैं देने के लिए है?
वैकल्पिक रूप से, आप ब्लॉक में एक ब्रेकपाइंट सेट कर सकते हैं और जब यह तक भर चुकी है डीबगर एक स्टैक ट्रेस आप कम से वमन जाएगा (जो ज्यादातर मामलों में IME अधिक 'NSLog' से उपयोगी है)। –
मैं ब्रेकपॉइंट्स का भी उपयोग करता हूं, और कभी भी ब्लॉक द्वारा वंचित महसूस नहीं किया है। – danh
मुझे नहीं लगता कि ब्लॉक के नामकरण में बनाया गया है, लेकिन आप निश्चित रूप से कतारों का नाम दे सकते हैं, जो आपको रास्ते का हिस्सा बनता है। यह डीबगर में दिखाई देता है और आप एनएसएलओजी कथन में शामिल कर सकते हैं। वैकल्पिक रूप से, आप भी '__FILE__' और' __LINE__' का उपयोग कर सकते हैं। शायद अपने स्वयं के मैक्रो को परिभाषित करें जो उपरोक्त का संयोजन है। – Rob