2012-06-13 11 views
5

मैं अन्य भाषाओं में काम किया तो की तरह, से पुन: उपयोग किया चर बाहर छोरों की घोषणा की आदत का अधिग्रहण किया है:उद्देश्य-सी में एक लूप के बाहर एक चर घोषित करने से कोई अनुकूलन प्रभाव पड़ता है?

NSString *lcword; 
for(NSString *word in tokens) 
{ 
    lcword = [ word lowercaseString ]; 
    ...  
} 

यह उचित भी ऑब्जेक्टिव-सी में यह करने के लिए है, या संकलक बहुत चालाक बनाना है यह अनावश्यक है?

+0

ज्यादातर मामलों में यह एक चर का पुन: उपयोग करने के लिए उचित नहीं है में। माइक्रो-ऑप्टिमाइज़ेशन –

उत्तर

9

उद्देश्य-सी में कोई लाभ नहीं है जिसे मैं जानता हूं। AFAIK प्रत्येक आधुनिक उद्देश्य-सी संकलक फ़ंक्शन या विधि की शुरुआत में स्थानीय चर के लिए स्टैक स्पेस आवंटित करता है। लूप को चर को स्कॉप करने से आपको लूप के बाहर नाम का उपयोग करने से रोकता है और यदि यह चाहता है तो कंपाइलर को स्टैक स्पेस का पुन: उपयोग करने से रोकता है।

यह भी देखें: Is there any overhead to declaring a variable within a loop? (C++) (यह के बारे में एक अलग भाषा है, तो मैं एक शिकार के रूप में चिह्नित नहीं होगा, लेकिन काम पर संकलक तकनीक बहुत समान हैं)

0

यदि आप एक चर का पुन: उपयोग कर सकते हैं तो इसे करें। यदि आवश्यक नहीं है तो प्रत्येक पुनरावृत्ति को एक नया घोषित करने की आवश्यकता नहीं है।

+3

के माध्यम से बग फेस्ट, जिससे वैरिएबल को आवश्यकतानुसार एक गुंजाइश बड़ा हो जाता है, इसलिए – Mark

+2

का दुरुपयोग होने की अधिक संभावना है, जैसा कि मैंने बताया है उससे सहमत नहीं हो सकता। आपको चर के रूप में चर का उपयोग करना चाहिए जो सबसे अधिक अर्थपूर्ण रूप से अर्थपूर्ण बनाता है। उन पर पुन: उपयोग करने की कोशिश कर बग के लिए एक नुस्खा है। जब तक आपको कोई वास्तविक समस्या न हो और परिवर्तन उस समस्या को मापने में हल हो जाए, तो सट्टा प्रदर्शन लाभ के लिए आपके प्रोग्राम की पठनीयता को कम करना लगभग हमेशा एक बुरा विचार आईएमओ है। – Chuck

+0

मैं आपके लिए @chuck से भी सहमत हूं, यह पठनीयता को आसान बनाता है, इसलिए जब भी मैं एक चर का पुन: उपयोग कर सकता हूं तो मैं करता हूं। –

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