數(shù)據(jù)類型決定了值如何存儲(chǔ)到計(jì)算機(jī)內(nèi)存中。在聲明變量時(shí)也可指定它的數(shù)據(jù)類型。不同數(shù)據(jù)類型來存儲(chǔ)不同的信息,所有變量都具有數(shù)據(jù)類型,以決定能夠存儲(chǔ)哪種數(shù)據(jù)。
C語言
C語言的基本數(shù)據(jù)類型有六種:
short、int、long、char、float、double
除基本數(shù)據(jù)類型外,還有一些構(gòu)造類型,比如:
數(shù)組array,結(jié)構(gòu)體struct,枚舉enum以及聯(lián)合union
OC的數(shù)據(jù)類型
OC是C的超集,所以O(shè)C的基本數(shù)據(jù)類型和C完全相同。
當(dāng)然,作為一個(gè)面向?qū)ο蟮母呒壵Z言,除了基本數(shù)據(jù)類型還定義了一些高級的數(shù)據(jù)類型。
比如在Foundation中,給一些數(shù)據(jù)定義了別名,對應(yīng)的映射關(guān)系是:
NSInteger <----> long
CGFloat <----> double
BOOL <----> bool
以上的數(shù)據(jù)類型不需要用指針,不需要手動(dòng)釋放,方法執(zhí)行完成后會(huì)自動(dòng)釋放。
但在OC的Foundation框架中,還是封裝了很多對象類型的屬性。
NSNumber
NSString/NSMutableString
NSArray/NSMutableArray
NSSet/NSMutableSet
NSDictionary/NSMutableDictionary
注意:
對于這些面向?qū)ο蟮膬?nèi)存管理,是特別復(fù)雜的存在。在編譯和運(yùn)行的時(shí)候,都對其做了優(yōu)化。
論證過程很復(fù)雜,大家可以去網(wǎng)上找相關(guān)資料。
只是告訴結(jié)論性的東西。
以上的所有可變類型均是以對象的形式保存在堆中,需要關(guān)注其引用計(jì)數(shù)。
對于不可變類型:
比如NSDictionary、NSArray以及NSValue實(shí)例,除了空字典和空字符串,其余實(shí)例都遵循對象的內(nèi)存管理策略。
NSNumber類創(chuàng)建的對于普通數(shù)據(jù)類型的封裝的實(shí)例,其內(nèi)存管理同樣做了優(yōu)化,不遵循對象的內(nèi)存管理策略。
swift的數(shù)據(jù)類型
swift作為新的語言,采納了很多優(yōu)秀的語言特性,完善了基本數(shù)據(jù)類型,同時(shí)推出了很多高級的數(shù)據(jù)類型。
基本數(shù)據(jù)類型:
1、Int/Float/Double/Bool/Character/String
2、Array/Dictionary/元組類型(Tuple)/可選類型(Optional)
對于整型,根據(jù)位數(shù)和有無符號做了很多區(qū)分
Int8、Int16、Int32、Int64
UInt8、UInt16、UInt32、UInt64
推薦使用Int/UInt類型,因?yàn)槠溟L度和當(dāng)前系統(tǒng)長度相同,
* 在32位系統(tǒng)平臺(tái)上,Int和Uint的長度是32位
* 在64位系統(tǒng)平臺(tái)上,Int和Uint的長度是64位
針對浮點(diǎn)型
double: 15位有效數(shù)字
float: 6位有效數(shù)字
沒有明確的說明,浮點(diǎn)數(shù)默認(rèn)就是Double類型
swift中的Bool數(shù)據(jù)類型,只有true和false兩種狀態(tài),沒有0和1的狀態(tài)。
除此之外的有:
類類型Class
結(jié)構(gòu)體類型struct
枚舉類型enum
結(jié)構(gòu)體類型和枚舉類型進(jìn)行了擴(kuò)展,可以添加屬性,定義方法等等。
文末
其實(shí)數(shù)據(jù)類型不局限于此,文中列舉的主要是一些常見的數(shù)據(jù)類型。
此文除了作為簡單介紹外,也希望大家格外關(guān)注OC中NSString類型的內(nèi)存管理,swift中一些類型的高級使用。