NSNumber और NSInteger के बीच क्या अंतर है? क्या ऐसे कुछ प्राइमेटिव हैं जिनके बारे में मुझे पता होना चाहिए? क्या तैरने के लिए कोई है?NSNumber और NSInteger के बीच क्या अंतर है?
उत्तर
मौजूदा उत्तर उपयोगी हैं; उन्हें जोड़ने:
हाँ, NSUInteger
NSInteger
के रूप में धनात्मक पूर्णांक के बीच दो बार सीमा देता है, लेकिन मैं एक और महत्वपूर्ण कारण चुनने के लिए दो बस है के बीच मामलों जहां ऋणात्मक मानों बस भावना नहीं बनाते हैं के बीच भेद करने के लिए लगता है।
उदाहरण:NSArray
के count
विधि की वापसी मान एक NSUInteger
, जो समझ में आता है, क्योंकि हम तत्वों का एक नकारात्मक संख्या के साथ एक सरणी नहीं हो सकता है। जब कोडर जानता है कि यह हस्ताक्षरित है, तो उसे संचालन करने की अधिक स्वतंत्रता है जो हस्ताक्षर किए गए मामले में अविश्वसनीय हो सकती है, जिसमें स्थानांतरण जैसे बिटकवे ऑपरेशंस शामिल हैं। This blog post हस्ताक्षरित बनाम हस्ताक्षरित के बारे में अधिक बात करता है।
मेरा अनुमान है के बारे में CGFloat
बनाम NSFloat
(जो मौजूद नहीं है): यह मामला है कि NeXTSTEP नाम कोड तत्वों के डिजाइनरों बस समय के बाहर भी कई नाव मान निर्दिष्ट की जरूरत नहीं थी हो सकता है अंतराल। इसलिए उन्होंने NSTimeInterval
दिया, जो एक फ़्लोटिंग-पॉइंट प्रकार है, लेकिन यह स्पष्ट रूप से समय अंतराल के उपयोग के लिए है। और, स्पष्ट रूप से, यह उस प्रकार का होना बहुत अच्छा है क्योंकि आप जानते हैं कि यह हमेशा एक संरचना से निपटने के बिना सेकंड में होना है। जब आप ग्राफिक्स दुनिया में जाते हैं (जहां कोर ग्राफिक्स रहता है), अचानक आपके चारों तरफ तैरते हैं, हवा में घूमते हैं (हाहा)। इसलिए वहां CGFloat
पेश करना समझ में आता है। यह अनुच्छेद सभी "शिक्षित अटकलें" है। क्योंकि इस तरह से यह आसान है पोर्टेबल कोड है कि मशीन वास्तुकला का पूरा फायदा ले जाता है लिखने के लिए:
इसके अलावा, बस तुम क्यों आदिम प्रकार की NSInteger
आदि का उपयोग कर सकते बजाय के बारे में स्पष्ट किया जाना है। उदाहरण के लिए, CGFloat
कुछ मशीनों पर 32 बिट्स और अन्य बिट्स पर 64 बिट्स का उपयोग करता है, जो कि उन आकारों के लिए उन मशीनों पर कितनी दक्षता अंतर है, इस पर निर्भर करता है। कुछ मामलों में, 64 बिट्स बनाम 64 बिट्स का उपयोग करने के लिए कोई वास्तविक गति नहीं है, इसलिए आप 64 बिट्स का भी उपयोग कर सकते हैं। यदि आपने CGFloat
के रूप में चीजों को घोषित कर दिया है, तो आप अचानक उस अतिरिक्त परिशुद्धता को "मुक्त करने के लिए" प्राप्त करते हैं जब आप पुनः संकलित करते हैं।
और, जैसा कि iKenndac ने कहा है, NSNumber
इन सब के लिए एक आवरण वर्ग है (और BOOL
जैसे अन्य आदिम या अर्ध-आदिम प्रकार) जो आप अपने NSArray
और NSDictionary
रों में शामिल करने के लिए सक्षम बनाता है, उन्हें अधिक आसानी से संग्रहित करें, और अन्य चीजें करें जो NSObject
एस कर सकते हैं।
NSNumber
एक वर्ग है, जो कि आदिम नहीं है, और इसका उपयोग तब किया जाता है जब आपको कच्ची संख्याओं को शब्दकोश, सरणी या अन्यथा इन्हें समाहित करने की आवश्यकता होती है। NSInteger
, NSUInteger
, CGFloat
, आदि सरल प्रकार और अनुरूप हैं (आईफोन की तरह 32-बीटी सिस्टम पर) int
, unsigned int
और float
पर।
एक सामान्य नियम के रूप में, यदि आपको कहीं नंबर स्टोर करने की आवश्यकता है, तो NSNumber
का उपयोग करें। यदि आप गणना कर रहे हैं, लूप, आदि, NSInteger
, NSUInteger
या CGFloat
का उपयोग करें।
आप लपेट कर सकते हैं एक NSInteger
एक NSNumber
में:
NSNumber *aNumber = [NSNumber numberWithInteger:21];
... और यह वापस पाने:
NSInteger anInteger = [aNumber integerValue];
आप यहाँ और अधिक जानकारी प्राप्त कर सकते हैं: http://iosdevelopertips.com/cocoa/nsnumber-and-nsinteger.html
NSInteger है सी में पारंपरिक int
की तरह यह एक टाइपिफ़ है। NSUInteger
, CGFloat
, आदि जैसे अन्य लोग हैं जो सभी प्राचीन प्रकार के समानार्थी हैं।
NSNumber उपयोगी है जब आपको किसी NSArray या NSDictionary में कोई संख्या चिपकाने की आवश्यकता होती है। मानक अभ्यास इन संग्रहों का उपयोग करके स्वयं को रोलिंग करना है; दोष यह है कि वे केवल उद्देश्य-सी वस्तुओं को शामिल कर सकते हैं।
NSArray * myArray = [[NSArray alloc] init];
[myArray addObject:3]; // invalid, will not compile.
[myArray [NSNumber numberWithInt:3]]; // ok
:
NSNumber अनिवार्य रूप से एक int
(या नाव, आदि) एक Obj सी वस्तु में है कि एक सरणी में जोड़ा जा सकता ('मुक्केबाजी' एक आदिम प्रकार के सी #/जावा की अवधारणा के समान) लपेटता
प्रदर्शन कारणों से, यदि आप कर सकते हैं, आदिम प्रकारों (जैसे int, float, int []) का उपयोग करें। हालांकि, कभी-कभी आप NSArray/NSNumber से नहीं बच सकते हैं, जैसे कि जब आप .plist
फ़ाइल में प्रविष्टियां पढ़ रहे हैं या लिख रहे हैं।
एनएसआईएनटेगर, एनएसयूइंटर, और सीजीएफएलएट टाइपपीफ हैं जो 32 या 64 बिट के तहत सुरक्षित हैं। – Abizern
जैसा कि पहले दूसरों ने कहा था, NSNumber
NSObject
सबक्लास है। यह सी आदिम नहीं है (int, unsigned int, float, double, आदि जैसे) NSInteger
, CGFloat
, NSUInteger
सी प्राइमेटिव्स पर typedefs
सरल हैं।
NSNumber
की आवश्यकताएं एपीआई के पैरामीटर के रूप में संख्याओं का उपयोग करने की आवश्यकता से उत्पन्न होती हैं जिन्हें ऑब्जेक्ट की आवश्यकता होती है। उदाहरण है, जब आप NSArray
में, कोर-डेटा में, या NSDictionary
में किसी नंबर को स्टोर करना चाहते हैं।
क्या ऐसे कुछ प्राइमेटिव हैं जिनके बारे में मुझे पता होना चाहिए? खैर, NSNumber
एक आदिम प्रकार नहीं है, और यह सभी प्रकार की संख्याओं (फ्लोट्स, अभिन्न प्रकार, बूलियन आदि) के आसपास लपेटता है। आपको NSValue के बारे में भी सीखना चाहिए, जो NSNumber
के लिए आधार है।
क्या फ्लोट्स के लिए कोई है? वहाँ नाव के लिए कोई "एन एस" typedef है, लेकिन NSNumber
किसी भी नाव संख्या लपेट कर सकते हैं:
NSNumber *myPi = [NSNumber numberWithFloat:3.1415926];
या आप CoreGraphics आदिम प्रकार CGFloat इस्तेमाल कर सकते हैं।
NSNumber आम तौर पर चर के भंडारण के लिए प्रयोग किया जाता है, NSUInteger अंकगणित
के लिए प्रयोग किया जाता है आप ऐसा करने से एक NSUInteger करने के लिए एक NSNumber बदल सकते हैं:
NSNumber *variable = @1;
NSUInteger variableInt = [variable unsignedIntegerValue];
यह पहले लेकिन एक सामान्य नियम के रूप में कहा गया है अंगूठे के, वेरिएबल्स जिन्हें परिभाषित करने की आवश्यकता है * उद्देश्य सी कक्षाएं हैं, जबकि वेरिएबल्स जिन्हें * की आवश्यकता नहीं है * सी प्राइमेटिव हैं।
- 1. int, NSInteger और NSUInteger के बीच अंतर
- 2. NSInteger
- 3. एकल कुंजी और कीपैथ के बीच क्या अंतर है?
- 4. # {} $ {} और% {} के बीच क्या अंतर है?
- 5. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 6. $ और $$ के बीच क्या अंतर है?
- 7. के बीच क्या अंतर है:। और: आर !?
- 8. भिन्नता और '-' के बीच क्या अंतर है?
- 9. "$^एन" और "$ +" के बीच क्या अंतर है?
- 10. के बीच क्या अंतर है?
- 11. अंतर और कहां के बीच क्या अंतर है?
- 12. file_get_contents और fread बीच क्या अंतर है
- 13. क्या बीच का अंतर है :: और ::: स्काला
- 14. "। +" और "। +?" के बीच अंतर
- 15. $ {} और # {} के बीच अंतर क्या हैं?
- 16. PHP के बीच क्या अंतर है और इसमें शामिल है?
- 17. अपवाद के .TOString() और मैसेज के बीच क्या अंतर है?
- 18. 7zip के 7z.sfx और 7zsd.sfx के बीच क्या अंतर है?
- 19. डीएल के फाइलवर्सन और उत्पादवर्जन के बीच क्या अंतर है?
- 20. UIImageView के फ्रेम और सीमाओं के बीच क्या अंतर है?
- 21. फ़ायरबग के console.log() और console.debug() के बीच क्या अंतर है?
- 22. @ "" NSNumber
- 23. पैरामीटर परिभाषाओं के बीच अंतर (प्रकार और नाम), और (प्रकार * नाम) के बीच अंतर क्या हैं?
- 24. कैटक्स्टलेयर और अक्षरों के बीच ट्रैकिंग/अंतर
- 25. ओरिएंटब संस्करणों के बीच क्या अंतर है?
- 26. एन्कोड/डीकोड के बीच क्या अंतर है?
- 27. os.popen() विधियों के बीच क्या अंतर है?
- 28. MATLAB में & &&& के बीच क्या अंतर है?
- 29. ऑब्जेक्ट और * के बीच अंतर?
- 30. इन कार्यों के बीच क्या अंतर है?
वास्तव में, वास्तव में निगलना बिंदु: एनएसटीमेइंटरवाल एक डबल, फ्लोट नहीं है। मुझे पता है कि डबल-परिशुद्धता फ्लोटिंग पॉइंट के लिए डबल छोटा है, लेकिन फिर भी। इसके अलावा, मैं समझता हूं कि 64-बिट पर डबल के रूप में संकलित CGFloat महान है, लेकिन एनएसआईएनटेगर? मैं ऐसी स्थिति के बारे में नहीं सोच सकता जहां यह उपयोगी होगा। कोड में कहें कि आप कुछ गणित कर रहे हैं जिन्हें 64 बिट्स की आवश्यकता है ... यदि आप 32 के लिए संकलित करते हैं तो आप एनएसआईएनटेगर का उपयोग नहीं कर सकते हैं। यदि आप 32 में फिट हैं, तो 64 का उपयोग क्यों करें? अजीब लगता है। – iKenndac
आप सही हैं, एनएसटीइम इंटरवल एक डबल है। मुझे लगता है कि यह अभी भी "फ़्लोटिंग-पॉइंट टाइप" के रूप में गिना जाता है। बस डबल परिशुद्धता के साथ। मैं यह भी मानता हूं कि कई मामलों में एनएसआईएनटेगर 64 बिट बनकर बहुत सारे कोड में सुधार नहीं होगा। लेकिन यहां एक संभावना है: एक यादृच्छिक संख्या जनरेटर। इस मामले में, आप वास्तव में गति की परवाह करते हैं, इसलिए जब आप तेज़ी से 32 बिट्स का उपयोग करना चाहेंगे। लेकिन यदि 64 बिट्स भी काम करता है, तो अचानक आपको यादृच्छिक-खुशी (_much_ लंबी चक्र लंबाई, आदि) में बहुत अधिक (यदि कोई हो) गति लागत में भारी वृद्धि मिलती है। – Tyler
हम एक बार वोट क्यों दे सकते हैं? प्रतिभाशाली! –