ما الفرق بين NSNumber و Nsinteger؟
-
18-09-2019 - |
سؤال
ما الفرق بين NSNumber و Nsinteger؟ هل هناك أكثر بيئيا مثل هذه التي يجب أن أعرفها؟ هل هناك واحد للطوائف؟
المحلول
الإجابات الحالية مفيدة؛ إضافة لهم:
نعم، NSUInteger
يعطي ضعف النطاق بين الأعداد الصحيحة الموجبة NSInteger
, ، لكنني أعتقد أن سبب حرج آخر لاختيار بين الاثنين هو ببساطة التمييز بين الحالات حيث القيم السلبية ببساطة لا معنى لها.
مثال: قيمة العودة NSArray
'س count
الطريقة هي NSUInteger
, وهذا منطقي أنه لا يمكننا أن يكون لدينا مجموعة مع عدد سلبي من العناصر. عندما يعرف المبرمج أنه غير مائعين، لديه / لديها المزيد من حرية إجراء العمليات التي قد تكون غير موثوق بها في القضية الموقع، بما في ذلك عمليات bitwise مثل التحول. هذه المدونة post. يتحدث المزيد عن الموقع مقابل غير موقعة.
تخميني عن CGFloat
ضد NSFloat
(أي غير موجود): قد يكون الأمر كذلك أن مصممي عناصر التعليمات البرمجية NextStep لم يكن يحتاج ببساطة إلى تحديد عدد كبير من القيم العائمة، خارج الفواصل الزمنية. لذلك أعطوا NSTimeInterval
, ، وهو نوع من الفاصلة العائمة، ولكنه مخصص بوضوح للاستخدام مع فترات زمنية. وبصراحة، من الرائع أن يكون هذا النوع لأنك تعرف أنه يعني دائما أن تكون في ثوان دون الحاجة إلى التعامل مع الهيكل. عندما تنتقل إلى عالم الرسومات (حيث تعيش الرسومات الأساسية)، يطفو فجأة من حولك، تحوم في الهواء (هاها). لذلك من المنطقي أن نقدم CGFloat
هناك. هذه الفقرة كلها "تكهنات تعليمية".
أيضا، فقط أن تكون واضحا لماذا قد تستخدم NSInteger
الخ بدلا من أنواع البدائية: لأن هذه الطريقة أسهل في كتابة التعليمات البرمجية المحمولة التي تستفيد بالكامل من بنية الماكينات. على سبيل المثال، CGFloat
يستخدم 32 بت على بعض الآلات و 64 بت على الآخرين، وهذا يتوقف إلى حد كبير على مقدار الفجوة الكفاءة الموجودة على تلك الآلات لتلك الأحجام. في بعض الحالات، ليس هناك تسريع حقيقي لاستخدام 32 بت vs 64 بت، لذلك قد تستخدم 64 بتساء. إذا كنت أعلنت أشياء كما CGFloat
"، تحصل فجأة على هذا الدقة الإضافية" مجانا "عند إعادة ترجمة.
وكما أشار IKENNDAC، NSNumber
هي فئة مجمع للجميع من هذه (وغيرها من أنواع البدائية أو شبه البدائية مثل BOOL
) والتي تمكنك من تضمينها في حياتك NSArray
رمل NSDictionary
S، أرشفة لهم بسهولة أكبر، والقيام بأشياء أخرى NSObject
S يمكن القيام به.
نصائح أخرى
NSNumber
هو فئة، ليست بدائية، ويستخدم عند الحاجة إلى وضع أرقام الخام إلى القواميس أو صفائف أو تغليفها بطريقة أخرى. NSInteger
, NSUInteger
, CGFloat
, ، إلخ هي أنواع بسيطة وتتوافق (على أنظمة 32 BT مثل iPhone) int
, unsigned int
و float
.
كقاعدة عامة، إذا كنت بحاجة إلى تخزين رقم في مكان ما، استخدم NSNumber
. وبعد إذا كنت تقوم بعمل حسابات، حلقات، إلخ، استخدم NSInteger
, NSUInteger
أو CGFloat
.
يمكنك التفاف NSInteger
في an. NSNumber
:
NSNumber *aNumber = [NSNumber numberWithInteger:21];
... واحصل عليه:
NSInteger anInteger = [aNumber integerValue];
يمكنك معرفة المزيد من المعلومات هنا: http://iosdevelopertips.com/cocoa/nsnumber-and-nsinter.html.
nsinteger هو تماما مثل التقليدية int
في C. انها typedef. هناك آخرون مثل NSUInteger
, CGFloat
, ، إلخ. أن جميعا جميعا مرادفات لأنواع بدائية.
NSNumber مفيد عندما تحتاج إلى التمسك برقم في nsarray أو nsdictionary. الممارسة القياسية هي استخدام هذه المجموعات مقابل الدوران الخاص بك؛ العيب هو أنه لا يمكن أن تحتوي فقط على كائنات موضوعية C.
nsnumber يلف بشكل أساسي int
(أو تعويم، إلخ) إلى كائن OBJ-C (على غرار مفهوم C # / Java الخاص ب "الملاكمة" نوع بدائي) يمكن إضافته إلى صفيف:
NSArray * myArray = [[NSArray alloc] init];
[myArray addObject:3]; // invalid, will not compile.
[myArray [NSNumber numberWithInt:3]]; // ok
لأسباب الأداء، إذا كنت تستطيع، استخدم أنواع البدائية (مثل int، Float، Int []). ومع ذلك، في بعض الأحيان لا يمكنك تجنب NSARRAY / NSNumber، مثل عند قراءة أو كتابة إدخالات إلى .plist
ملف.
يستخدم NSNumber عموما لتخزين المتغيرات، يستخدم NSUINTEGER للحساب
يمكنك تغيير NSNumber إلى NSUINTEGER عن طريق القيام بذلك:
NSNumber *variable = @1;
NSUInteger variableInt = [variable unsignedIntegerValue];
لقد قيل من قبل ولكن كقاعدة عامة للإبهام، المتغيرات التي يجب تحديدها مع * هي فئات C.، في حين أن المتغيرات التي لا تحتاج إلى أبيئها.
كما قال من قبل الآخرين من قبل، NSNumber
هو NSObject
فرعية. انها ليست ج c البدائية (مثل int، غير الموقعة، تعويم، مزدوج، إلخ.) NSInteger
, CGFloat
, NSUInteger
هي بسيطة typedefs
على جي بيئيين.
الحاجة إلى NSNumber
ينشأ من الحاجة إلى استخدام الأرقام كمعلمات إلى واجهات برمجة التطبيقات التي تتطلب الكائنات. مثال، عندما تريد تخزين رقم في NSArray
, ، في البيانات الأساسية، أو في NSDictionary
.
هل هناك أكثر بيئيا مثل هذه التي يجب أن أعرفها؟ نحن سوف، NSNumber
ليس نوعا بدائيا، وينتف على جميع أنواع الأرقام (يطفو، وأنواع متكاملة، ومن المنطمنون وما إلى ذلك). يجب أن تتعلم أيضا عن NSValue، وهي القاعدة NSNumber
.
هل هناك واحد للطوائف؟ لا يوجد "NS" typedef for float، ولكن NSNumber
يمكن التفاف حول أي رقم تعويم:
NSNumber *myPi = [NSNumber numberWithFloat:3.1415926];
أو يمكنك استخدام CoreGraphics النوع البدائي CGFLoat.