NSInteger,NSUInteger,NSNumber
2019獨角獸企業重金招聘Python工程師標準>>>
Objective-C入門教程10:數字類型(NSInteger,NSUInteger,NSNumber)
柳志超博客???Program???Objective-C???Objective-C入門教程10:數字類型(NSInteger,NSUInteger,NSNumber)
posted in?Objective-C?on?2012/12/14?by?liuzc
在Objective-C中,我們可以使用c中的數字數據類型,int、float、long等。它們都是基本數據類型,而不是對象。也就是說,不能夠向它們發送消息。然后,有些時候需要將這些值作為對象使用。
NSInteger、NSUInteger
當你不知道程序運行哪種處理器架構時,你最好使用NSInteger,因為在有可能int在32位系統中只是int類型,而在64位系統,int可能變是long型。除非不得不使用int/long型,否則推薦使用NSInteger。
從上面的定義可以看出NSInteger/NSUInteger是一種動態定義的類型,在不同的設備,不同的架構,有可能是int類型,有可能是long類型。
NSUInteger是無符號的,即沒有負數,NSInteger是有符號的。
NSNumber
有人說既然都有了NSInteger等這些基礎類型了為什么還要有NSNumber?
NSNumber可以將基本數據類型包裝起來,形成一個對象,這樣就可以給其發送消息,裝入NSArray中等。
Cocoa提供了NSNumber類來包裝(即以對象形式實現)基本數據類型。
+?(NSNumber*)numberWithChar:?(char)value;+?(NSNumber*)numberWithInt:?(int)value;+?(NSNumber*)numberWithDouble:(double)value;+?(NSNumber*)numberWithFloat:?(float)value;+?(NSNumber*)numberWithBool:?(BOOL)?value;...將基本類型數據封裝到NSNumber中后,就可以通過下面的實例方法重新獲取它:
-?(char)charValue;-?(int)intValue;-?(float)floatValue;-?(double)doubleValue;-?(BOOL)boolValue;...?
NSValue類
我們說像數組這樣的Foundation集合只能存儲對象,不能存儲像int這樣的基本數據類型.但是我們往往也會有這樣的需求,例如需要將CGPoint或是CGRect這樣的結構存儲在集合中.一個NSValue對象是用來存儲一個C或者Objective-C數據的簡單容器。它可以保存任意類型的數據,比如int,float,char,當然也可以是指pointers, structures, and object ids。NSValue類的目標就是允許以上數據類型的數據結構能夠被添加到集合里.這種結構轉化為對象的方式,不就是java中的裝箱(boxing)嗎?不過在Objective-C中稱為包裝(wraping),相反的,從對象中解出基本類型,稱為展開(unwraping),在java中叫拆箱(unboxing).
NSNumber 繼承自NSObject,可使用compare、isEqual等消息。
NSNumber是NSValue的子類。NSValue可包裝任意類型值。
前面我們也介紹了Objective-C中的一些特殊數據類型:Objective-C入門教程05:特殊數據類型
更多關于NSValue的信息可以查看官方文檔:NSValue Class Reference
更多信息可以參考:Foundation Data Types Reference
轉載于:https://my.oschina.net/gongxiao/blog/517629
總結
以上是生活随笔為你收集整理的NSInteger,NSUInteger,NSNumber的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宏在使用过程余函数的区别1
- 下一篇: C语言程序读写文件(文件内存一个十进制数