swift 物件儲存地址分析
前言:
開始學swift,大家不知道有沒有我這個疑問,現在用let var 來給常量變數賦值,那麼以前OC那些屬性修飾符在swift
是怎麼用呢?
swift let var 是strong 強引用 是weak 弱引用 還是copy 呢。帶著這個問題,測試分析一波。
測試列印程式
先定義一個列印物件地址方法:
swift4.0列印記憶體地址的方法是: Unmanaged.passUnretained(obj).toOpaque()
swift語言還在改動中,目前已經趨於穩定,4之前的列印地址記憶體地址方法:%p ,unsafeaddressof 都以無效。
//定義方法列印物件記憶體地址
func printAddress(values:AnyObject...){
for value in values {
print(Unmanaged.passUnretained(value).toOpaque())
}
print("-----------------------------------------")
}
驗證測試:先看看這個列印方法是不是列印記憶體地址,而不是指標地址。製作一個單例,然後看看是否使用一塊記憶體。
final class Single:NSObject {
static let sharedManger = Single()
private override init(){
}
}
var sing1 = Single.sharedManger
var sing2 = Single.sharedManger
var sing3 = Single.sharedManger
printAddress(values: sing1 as AnyObject,sing2 as AnyObject,sing3 as AnyObject)
列印結果:
直接看程式分析結果:
var a1 = 5
let b1 = a1
a1=8
print(a1,b1)
printAddress(values: a1 as AnyObject,b1 as AnyObject)
let a2 = 5
let b2 = a2
print(a2,b2)
printAddress(values: a2 as AnyObject,b2 as AnyObject)
var a = 5
var b = a
a=8
print(a,b)
printAddress(values: a as AnyObject,b as AnyObject)
列印結果:
step2 :字串:string 和nsstring
//string
var str = "hello"
var str1 = str
str = "world"
str1
printAddress(values: str as AnyObject,str1 as AnyObject)
//nsssting
var nsstr = NSString.init(string:"6666")
var nsstr1 = nsstr
nsstr = "ssss"
nsstr1
printAddress(values: nsstr as AnyObject,nsstr1 as AnyObject)
step3:陣列、字典、結構體:
//陣列
var array = ["1","2","3"]
var array1 = array
array.remove(at: 2)
print(array.description+"---"+array1.description)
printAddress(values: array as AnyObject,array1 as AnyObject)
//結構體
var my = myStruct()
var my1 = my
my.height = 5
print(my1.height)
step4:類物件
class ReferenceObj:NSObject,NSCopying{
func copy(with zone: NSZone? = nil) -> Any {
let copyobj = ReferenceObj()
return copyobj;
}
var name:String = ""
var age=0
var friends:NSArray?
var skill:Dictionary<String, Any>?
}
var ref = ReferenceObj();
ref.name = "re1"
var ref1 = ref;
print(ref.name+"\n"+ref1.name)
var ref2 = ref.copy() as! ReferenceObj
printAddress(values: ref as AnyObject,ref1 as AnyObject,ref2 as AnyObject)
分析結果:
以上型別除了let 賦值let的時候和類物件賦值預設賦值情況下是引用,沒有對記憶體地址進行拷貝。其他情況都會進行地址拷貝。如果類物件進行地址拷貝和oc一樣遵循NSCopying協議,物件執行copy方法即可拷貝地址。
相關文章
- 指標儲存地址分析指標
- 塊儲存 檔案儲存 物件儲存物件
- 儲存—物件儲存_Minio物件
- 物件儲存物件
- 面向不同需求的物件儲存系統對比:Ceph與Swift物件Swift
- 物件儲存,未來儲存新潮流物件
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- 在swift3.0中列印物件的地址資訊Swift物件
- Ceph Reef(18.2.X)之Swift操作物件儲存閘道器Swift物件
- DAOS 分散式非同步物件儲存|儲存模型分散式非同步物件模型
- 分散式儲存ceph 物件儲存配置zone同步分散式物件
- minio-物件儲存物件
- 七牛雲物件儲存物件
- 什麼是物件儲存?物件
- 使用NSUserDefault儲存物件模型物件模型
- NSUserDefault 儲存自定義物件物件
- MySQL如何有效的儲存IP地址MySql
- 物件儲存的優勢有哪些?為什麼要選擇物件儲存?物件
- 杉巖:淺談物件儲存和塊儲存區別物件
- 如何利用MySQL有效的儲存IP地址MySql
- greenDAO資料庫之修改儲存地址資料庫
- Go 中使用 memcache 儲存物件Go物件
- Django整合騰訊COS物件儲存Django物件
- redis個人原始碼分析筆記4--hash物件的儲存Redis原始碼筆記物件
- CEPH分散式儲存搭建(物件、塊、檔案三大儲存)分散式物件
- jquery 判斷email地址是否合法並儲存jQueryAI
- WordPress如何使用騰訊雲物件儲存COS儲存媒體庫附件物件
- 物件儲存、檔案儲存、塊儲存這三者之間有什麼區別?物件
- java物件頭的兩種儲存Java物件
- Laravel 使用騰訊雲 cos 儲存物件Laravel物件
- OSS物件儲存的全球加速方案物件
- 快速使用七牛雲物件儲存物件
- 在session中儲存JSON物件SessionJSON物件
- 物件儲存服務的加密特性物件加密
- 物件儲存服務的Lambda特性物件
- Swift記憶體賦值探索一: 理解物件在記憶體中的儲存狀態Swift記憶體賦值物件
- 海量圖片儲存,杉巖分散式物件儲存輕鬆應對分散式物件
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件