簡述
本文主要探究使用OC作為iOS開發語言時,我們能使用哪些數據類型。
一切類型始於C。
C語言的類型
基本數據類型:
基本數據類型(fundamental data types)也叫原始數據類型(primitive data types)
整型、字符型、浮點型、枚舉型

枚舉型在計算機內部以 int 類型存儲
除了基本數據類型,C還有
構造類型:
數組類型, 結構體類型(struct), 共用/聯合體類型(union)
union一般在對單片機等內存比較小的設備進行編程時才使用。
指針類型:
data_type *pointer_name
由於指針在實質上是一個內存地址,內存地址的長度跟CPU的尋址有關(與data_type無關)
所以在32位系統上, 指針占據4個字節;在64位系統上,指針占據8個字節
空類型(void):
空類型一般用於函數的返回值,表示不需要返回任何類型。
由於void類型只是一個抽象概念,並不會存在於內存中,自然就沒有字節占用。
有了類,世間萬物皆可定義。
OC語言類型
由於Objective-C是C語言的嚴格超集,因此以上的數據類型也是OC數據類型。
相比於C
OC是一門面向對象語言,如同C++一樣支持用戶定義類型(class)。
用戶定義類型為Cocoa框架的誕生提供了可能。
類型越來越復雜,代碼越來越簡潔。
iOS數據類型
一般而言,我們所說的數據類型/基本數據類型都是指一門語言的。
iOS數據類型 = C數據類型 + Cocoa類
iOS數據類型不是一種嚴謹的叫法,實際上指的是C數據類型加上Cocoa框架集合(Foundation、UIKit等)中定義的的數據類型,也即Cocoa類(泛指所有基於Objective-C運行時且派生自根類NSObject的類)。
Foundation框架中定義的NSObject類是iOS中最重要的數據類型,用戶定義的類都需要繼承自它從而獲得調用iOS系統資源的能力。Foundation中還有一個重要的集合(Collection)概念,其包含了NSArray、NSSet、NSDictionarry以及各自的可變類型;此外,還有NSString、NSMutabString、NSNumber等重要的類型。以上提及的類型均繼承自NSObject,是用戶定義類型(class)而並非構造類型(struct),它們在被賦值或者被傳入函數或者方法時,不會發生值拷貝,而是傳遞現有實例的引用。
總結

注:由於在iOS中BOOL實際上是signed char類型的重命名,NSInteger等也大同小異,因而並沒有將它們歸為新的類型。