Her şeyden önce, bir yapıyı geçirirseniz, normal olarak değere geçer. yapının tüm özelliklerini özelliklerine sadece işaretçi kopyalanan olsa UIImage gibi referans türleri (sadece 8 bayt) yinelenmiş olur hangi: yapılar içten referans olarak geçti ve kopyalanan böylece
var data1 = MyData()
var data2 = data1
// both data1 and data2 point to the same image
Ayrıca derleyici kodu optimize gerekirse. Eğer inout
parametreler kullanabilirsiniz üst düzey kodunda referans bir yapı geçirmeden bir örnek olarak
: Yani bir inout
parametre başvuruyla geçirildi ancak inout
uygulanması Swift'in genel yolu parametre değeri ile ve sonra geçişleri alır olduğunu edilebilir Bu işlev tekrar atanır.
Derleyici, işlev çağrısını en iyi duruma getirmesine rağmen, bazı durumlarda doğru bir başvuru alabilmeniz için. Bu optimizasyon, yalnızca hesaplanmamış veya willSet
ve didSet
(ve muhtemelen başka durumlar) gibi bir özellik gözlemcisine sahip değişkenleri etkiler.
Yani sadece fonksiyonun kapsamında değildir Mevcut örnek güvenmek gerekir: myTest
görebilir ve t
durumda 1'de sadece eşdeğer olduğundan
struct Test {
var value = 0
}
// case 1
var myTest = Test()
// case 2
var myTest = Test() {
didSet { print("I was set") }
}
// case 3
var myTest: Test {
get{ return Test() }
set{ print("I set myself") }
}
func mutateTest(inout t: Test) {
// directly referencing to myTest
myTest.value // value = 0 in all cases
t.value = 42
myTest.value // value = 42 in case 1 ; value = 0 in case 2 and 3
t = Test() // nothing gets printed
myTest.value // value = 0 in all cases
t = Test() // nothing gets printed
t.value = 3 // value = 3 in case 1 ; value = 0 in case 2 and 3
}
changeTest(&myTest)
//case 2: "I was set", case 3 "I set myself" get printed now
myTest.value // value = 3 in all cases
("true" referans semantik) . Bu, fonksiyonun kendisinde de myTest
referansını verirseniz, bu büyük bir fark yaratır. Ama bunu yapmadığınız sürece, gitmekte fayda var.
Neyse ki resminiz bir referans türüdür ve UIImage'a referansta geçerek yaptığınız gibi, yapıyı değere göre kopyalamakla aynı maliyete katlanacaktır. –
Bu bir kaynak ile iyi bir cevap olurdu – Esqarrouth