第一種情況Point是一個(gè)類(Class)燥狰,Rectangle也是一個(gè)類揣云。類具有引用屬性捕儒,在棧里面只有一個(gè)指針,指向堆空間的數(shù)據(jù)邓夕。此方法的模型存儲(chǔ)傳參代價(jià)較小刘莹,不需要復(fù)制全部數(shù)據(jù),節(jié)約楐崆ǎ空間栋猖。缺點(diǎn)是有可能會(huì)有安全隱患,指向堆空間的值被其他指針修改汪榔,雖然Swift有了ARC管理機(jī)制來管理堆空間的釋放,但是循環(huán)引用還是會(huì)造成內(nèi)存泄露肃拜。
第二種情況Point是一個(gè)結(jié)構(gòu)(struct),Rectangle是一個(gè)類痴腌。Point的值存在棧中,Rectangle需要使用他的值時(shí)進(jìn)行復(fù)制操作燃领。Rectangle在棧中只有一個(gè)指針士聪,指向堆空間的數(shù)值。我認(rèn)為這是最佳的實(shí)現(xiàn)方式猛蔽,既保證了Rectangle中Point的安全性剥悟,有沒有占用太多棧資源。
第三種情況Point是一個(gè)類曼库,Rectangle是一個(gè)結(jié)構(gòu)区岗。Point類會(huì)通過傳引用(指針)的方式傳參給Rectangle,雖然Rectangle是一個(gè)結(jié)構(gòu)毁枯,但是還是會(huì)指向Point類堆空間的數(shù)據(jù)慈缔,這樣既浪費(fèi)了棧空間种玛,也沒有安全性藐鹤。這種實(shí)現(xiàn)方式是最不推薦的瓤檐。
第一種情況Point是一個(gè)結(jié)構(gòu),Rectangle也是一個(gè)結(jié)構(gòu)娱节。這樣做全部是復(fù)制數(shù)值傳遞參數(shù)挠蛉,整個(gè)傳參的過程消耗會(huì)比較多,也很占棧的空間肄满。并且函數(shù)結(jié)束時(shí)棧內(nèi)容也將全部銷毀碌秸。