Objective-C數(shù)據(jù)類型---可以分為: 基本數(shù)據(jù)類型、對象數(shù)據(jù)類型、id類型旗闽。
- 基本數(shù)據(jù)類型有:int、float蜜另、double和char類型适室。
- 對象類型就是類或協(xié)議所聲明的指針類型,例如:NSAutoreleasePool *pool ,其中举瑰,NSAutoreleasePool是一個類捣辆,NSAutoreleasePool *是它指針類型或叫對象類型。
- id類型可以表示任何類型此迅,一般只是表示對象類型汽畴,不表示基本數(shù)據(jù)類型,所以剛才的變量可以聲明pool也可以聲明為id pool耸序。
Swift 包含了 C 和 Objective-C 上所有基礎(chǔ)數(shù)據(jù)類型忍些,Int 表示整型值; Double 和 Float 表示浮點型值坎怪; Bool 是布爾型值罢坝;String 是文本型數(shù)據(jù)。 Swift 還提供了三個基本的集合類型搅窿,Array嘁酿、Set 和 Dictionary
除了我們熟悉的類型隙券,Swift 還增加了 Objective-C 中沒有的高階數(shù)據(jù)類型比如元組(Tuple)。元組可以讓你創(chuàng)建或者傳遞一組數(shù)據(jù)闹司,比如作為函數(shù)的返回值時娱仔,你可以用一個元組可以返回多個值。
------------------------------ Int -----------------------------------
Objective-C:int是礎(chǔ)數(shù)據(jù)類型
Double游桩、Float拟枚、Bool也都是結(jié)構(gòu)體了
不單單只有值,還有自己的屬性和方法众弓,兩者的賦值操作效果一樣
------------------------- 賦值操作(copy) -------------------------
A = B恩溅,編輯A,B也改變可以理解為淺拷貝(兩者的內(nèi)存地址一樣)谓娃,B不改變?yōu)樯羁截悾▋烧叩膬?nèi)存地址不一樣)
------------------------ 結(jié)構(gòu)體(struct) -----------------------
Objective-C:結(jié)構(gòu)體是C語言中一種重要的數(shù)據(jù)類型脚乡,是一種容器,比較靈活,可以用來定義不同類型的變量,其主要作用是封裝滨达,將一系列成員變量封裝起來奶稠,使用者只管使用。只能有屬性捡遍,不能有方法锌订,不能繼承。賦值操作屬于深拷貝画株,這里的深拷貝只是針對結(jié)構(gòu)體本身辆飘,其屬性視情況而定
Swift:比OC的結(jié)構(gòu)體還多增加了方法。賦值操作屬于深拷貝谓传,與前者一樣
------------------------ 類(Class) ---------------------------
Objective-C:繼承NSObject蜈项。絕大多數(shù)類,賦值操作屬于淺拷貝
Swift:可以不繼承NSObject续挟,賦值操作屬于淺拷貝
--------------------------- String -------------------------------
Objective-C:NSString 是一個類,比較特殊的類 紧卒,賦值操作可以理解為深拷貝
Swift:String 是一個結(jié)構(gòu)體,賦值操作屬于深拷貝
---------------- 集合類型( Array诗祸、Set 跑芳、 Dictionary) -----------------------
Objective-C:NSArray 類類型 ,賦值操作屬于淺拷貝
Swift:Array 是一個結(jié)構(gòu)體直颅,增加了很多方法博个,特別是高階函數(shù),讓數(shù)組的操作更方便际乘、優(yōu)雅坡倔。賦值操作屬于深拷貝
這里的copy 都是指的集合本身,容器內(nèi)的元素是根據(jù)自身決定。這里不詳解
--------------------------- 閉包(block) -------------------------------
Objective-C:block 罪塔,賦值操作可以理解為淺拷貝
Swift:閉包 是自包含的函數(shù)代碼塊投蝉,可以在代碼中被傳遞和使用,兩者相似征堪。賦值操作屬于淺拷貝
寫法稍有不同瘩缆,注意循環(huán)引用
--------------------------- 元組(Tuple) -------------------------------
Objective-C:不存在
Swift:新數(shù)據(jù)類型,把多個值組合成一個復(fù)合值佃蚜。元組內(nèi)的值可以是任意類型庸娱,并不要求是相同類型。
----------------------------- 總結(jié) ------------------------------------
Objective-C:copy谐算、mutableCopy 是NSObject的方法熟尉。賦值操作---結(jié)構(gòu)體和NSString是深copy,其他為淺copy
Swift:賦值操作---閉包洲脂、類對象是淺copy斤儿,其他為深copy
(重點是關(guān)注集合類型的改變,特別是數(shù)組)
ps:文章中涉及的oc的賦值恐锦,都是在常規(guī)的修飾詞下往果。特殊情況待分析