Başlıktan da anlaşılacağı gibi, swift'te bir türün girebileceği iki kategori vardır:
Değer Türü - her örnek, verilerinin benzersiz bir kopyasını tutar. Bir değişkene veya sabite atandığında veya bir işleve iletildiğinde yeni bir örnek (kopya) oluşturan bir tür.
Başvuru Türü - her örnek verilerin tek bir kopyasını paylaşır. Bir değişkene veya sabite atandığında veya bir işleve iletildiğinde başlatıldığında, aynı mevcut örneğe bir başvuru döndüren bir tür.
Okuduklarınızı doğru bir şekilde anlamak için aşağıdaki gif'e bir göz atın.
Aşağıdaki oyun alanı kod bloğunu düşünün:
Yukarıdaki sınıfın
Homeherhangi bir başlatıcısı yoktur. Depolanan özelliğin
roomCountvarsayılan değeri 2'dir . Şimdi, adlı oluşturulan ilk örneğe bir göz atın
peterVilla. Bu bir olacak
roomCountbir
2.
Şimdi adında yeni bir nesne oluşturun
johnVillave yukarıdaki kodda olduğu gibi geçirgen nesneyi buna atayın. Ne düşünüyorsunuz
roomCountait
johnVillaolacak? Bu aynı olacaktır
roomCountarasında
peterVillasağ ?. EVET 2 .
Şimdi değiştirmek
roomCountait
johnVillaiçin 5 ve sonra baskı
roomCounthem evlerin. Her ikisi de 5 sayısını basacaktır .
Nedeni :
Sınıf bir referans türüdür. Bir referansın kopyalanması, dolaylı olarak paylaşılan bir örnek oluşturur. Bir kopyadan sonra, iki değişken verinin tek bir örneğini ifade eder, bu nedenle ikinci değişkendeki verilerin değiştirilmesi orijinali de etkiler.
Not : Sınıf, bir referans türüdür. Bu, bir sınıf türünün değişkeninin gerçek bir örneği depolamadığı, ancak örneği depolayan bellekteki (yığın) bir konuma başvurduğu anlamına gelir.
Cevap: Hiçbir şey olmuyor. Aşağıdakileri yapın ve kodu çalıştırın:
let peterVilla = Home() let johnVilla = peterVilla
Sınıflar referans nesneler olduğundan, aralarındaki tek fark
letve
vardeğişkeni aynı türden farklı bir sınıfa yeniden atayabilme yeteneğidir.
letVe
varanahtar kelimeler bir sınıf üzerinde bir değişken değiştirme yeteneği etkilemez.
Ancak, aşağıdaki kodu göz önünde bulundurun:
Yukarıdaki kod oldukça açıklayıcıdır.
Basit bir şekilde düşünün : Bir HOME oluşturduğumuzda veya bir tane satın aldığımızda ve bunu bir izin sabitine verdiğimizde, yalnızca roomCount'u değiştirebiliriz. Yani burada John, değişmez olduğu için evini yükseltemez (izin ver). Yeni bir ANA SAYFA yaratamayız veya onu değiştiremeyiz. bize kızalım 🤬😡🤬😡 . Sanırım şimdi anladın !!
Eğer bir
johnVillaise
var, o zaman değiştirilebilir ve evini istediği kadar yükseltebilir veya değiştirebilir. Aşağıdaki koda bir göz atın:
Aşağıdaki oyun alanı kod bloğunu düşünün. İşte
Homebir
struct.
Burada
Homebir yapı olduğundan ve
johnVillaizin sabiti olduğundan,
roomCountönceki bölümde bir sınıf için yaptığımız gibi değiştiremeyiz .
Bunun nedeni, struct'ın bir değer türü olması ve
letbir yapı üzerinde kullanımın bu nesneyi sabit hale getirmesidir. Değiştirilemez veya yeniden atanamaz ve değişkenleri de değiştirilemez. Bir yapının
vardeğişkenleri değişmiş olabilir.
Bu nedenle, johnVilla'nın değerini yeniden atamak da başarısız olacaktır.
let peterVilla = Home() let johnVilla = peterVilla johnVilla = Home() //error: cannot assign to value: ‘johnVilla’ is a ‘let’ constant
Yukarıdaki kod basittir. Değerin yeniden atanması ve üye değişkeninin değiştirilmesi gibi tüm hususları kapsar. Biz atama olmasına rağmen
peterVillahiç
johnVillahat 44,
johnVillabir olan bağımsız örneği kendi benzersiz kopya ile
peterVilla'sveri.
Not: Swift'de bir değer türünü değiştirirken, aslında değeri değiştirmezsiniz. Değeri tutan değişkeni değiştiriyorsunuz.
Bununla birlikte, hızlı
structolan tek
value typeve
classtek değildir
reference type. İşte bazı örnekler:
Swift, bir referans türünü bir
class. Bu, miras alınan her şeyin
NSObjectbir referans türü olarak depolandığı Objective-C'ye benzer .
Kaynak: Apple Docs
Öyleyse, yeni bir tür oluşturmak istiyorsanız, hangi tür yapacağınıza nasıl karar vereceksiniz? Cocoa ile çalışırken, birçok API NSObject'in alt sınıflarını bekler, bu nedenle bir sınıf kullanmanız gerekir. Diğer durumlar için, işte bazı yönergeler:
===mantıklı.
===iki nesnenin tam olarak aynı olup olmadığını kontrol eder , verileri depolayan hafıza adresine kadar.
Daha önce bahsedildiği gibi, referans türü örnekler içinde saklanır
heapve yapı gibi bir değer türünün örnekleri, adı verilen bir bellek bölgesinde bulunur
stack. Değer türü örneği bir sınıf örneğinin parçasıysa, değer, sınıf örneğiyle birlikte yığında saklanır.
Yığın, her ikisi de bilgisayarın RAM'inde saklanan statik bellek ayırma için ve Yığın dinamik bellek ayırma için kullanılır.
Referans türleri için referans yığında depolanırken başvurduğu nesne yığın üzerinde depolanır. Değer türleri için, nesnenin kendisi yığında saklanır.
Referans türleri her zaman öbek üzerinde depolandığından, içerdikleri her şey (değer türleri bile) öbek üzerinde depolanır. Örneğin: Bir sınıfın içinde bir struct örneği varsa, bu durumda struct örneği, sınıf örneğiyle birlikte yığın içinde depolanır.
Kısaca: Referans türleri her zaman Öbeğe gider, oysa Değer Türleri her zaman bildirildikleri yere gider.
Referans: QUORA ve diğer birkaç site
→ Yığın, CPU tarafından sıkı bir şekilde yönetilir ve optimize edilir. Bir fonksiyon bir değişken yarattığında, yığın o değişkeni depolar ve fonksiyondan çıktığında yok edilir. Yığın üzerine tahsis edilen değişkenler doğrudan belleğe kaydedilir ve bu belleğe erişim çok hızlıdır. Bir işlev veya yöntem, sırayla başka bir işlevi vb. Çağıran başka bir işlevi çağırdığında, tüm bu işlevlerin yürütülmesi, en son işlev değerini döndürene kadar askıda kalır. Yığın her zaman bir LIFO sırasına göre rezerve edilir, en son ayrılan blok her zaman serbest bırakılacak bir sonraki bloktur. Bu, yığının izini sürmeyi gerçekten kolaylaştırır, yığından bir bloğu serbest bırakmak, bir işaretçiyi ayarlamaktan başka bir şey değildir. Yığın çok iyi organize edildiği için çok verimli ve hızlıdır.
→ Sistem öbeği diğer nesneler tarafından referans verilen verileri depolamak için kullanır. Yığın, genellikle sistemin bellek bloklarını talep edebileceği ve dinamik olarak tahsis edebileceği büyük bir bellek havuzudur. Yığın, nesnesini yığın gibi otomatik olarak yok etmez. Bunu yapmak için dışarıdan bir çalışma yapılmalıdır. ARC, işi apple cihazlarında yapar. Referans sayısı ARC tarafından izlenir ve sıfır olduğunda, nesne serbest bırakılır. Bu nedenle, genel süreç (tahsis, referansları izleme ve serbest bırakma) yığına kıyasla daha yavaştır. Dolayısıyla değer türleri referans türlerinden daha hızlıdır.
Bu kadar. !
Zevk almak!!
Herhangi bir yorumunuz, sorunuz veya öneriniz varsa, bunları aşağıdaki yorum bölümüne göndermekten çekinmeyin!
SwiftUI ile Lego Gibi Bir Uygulama Oluşturun — Eğitim 13 1. Giriş Swift'de ve çoğu programlama dilinde, sıralı bir öğe dizisine Dizi adı verilir.
Giriş Son SwiftUI projem için bir WYSIWYG editörü uygulamak istedim. Web'de aramaya başladım ve SwiftUI'de bunun için uygun bir uygulama bulamadım.
Amerika'daki şirketlere her gün oluyor. Bilgisayar korsanları, savunmasız bilgisayar sistemlerinden yararlanır ve kelimenin tam anlamıyla şirketi "devralır".
Ryan Whitwam Dış güneş sistemi büyük kaya ve buz parçalarıyla doludur, ancak yörüngeleri nadiren onları Dünya'ya iyi bir görünüm elde etmemiz için yeterince yakınlaştırır. Ve bir de 2014 UN271 var, gökbilimcilerin güneş etrafında bir milyon yıllık yörüngede dev bir kuyruklu yıldız olduğuna inandıkları yaklaşan bir nesne.
Erkek arkadaşım memleketime geldikten kısa bir süre sonra, “Kapıdan çıktığımız anda farklı bir insana dönüşüyorsun,” demişti bana. "Nasıl yani?" "Sınırdasın.
2020 Yaz protestoları sırasında ırksal adalet çağrısında bulunan milyonlarca insan dışarı çıktı ve kendilerini ırkçılık ve nasıl aktif olarak ırkçılık karşıtı olunacağı konusunda eğitmek için kitap satın aldı. Sistemik ırkçılığın doğasını anlamak ve ırkçılığın insanlar arasında münferit olaylarda meydana geldiği inancının ötesine geçmek bazı insanlar için bir şekilde şaşırtıcı olmuştur.
NCIS yıldızı Mark Harmon, 2003'ten beri Gibbs'i oynuyor. Raporlar, oyuncunun bu sezon çok fazla bölümde yer almayacağını söylüyor. İşte bildiklerimiz.
'The Hitman's Wife's Bodyguard' yönetmeni Patrick Hughes filmi çekerken o kadar çok gülüyordu ki stüdyodan çıkmak zorunda kaldı.
BTS'in şarkısı 'Butter', Billboard Hot 100'de art arda dört hafta boyunca 1 numaraya ulaştı ve grubun 'Dynamite' ile önceki rekorunu geride bıraktı.
'Sex and the City' hayranlarının küçük bir fraksiyonu, Big ile evli olmasına rağmen Aidan Shaw'ın Carrie Bradshaw'ın gerçek aşkı olduğunu düşünüyor. Seride kanıt var mı?
ABD, COVID-19 sonrası bir miktar normalliğe dönerken, şehirler, otoyolların bir kez daha tıkanmasını önlemek için taşıtları yollardan yeterince uzak tutabilir mi?
Federal İşsizlik Vergisi Yasası olan FUTA, Büyük Buhran'a yanıt olarak 1939'da kanun haline getirildi ve COVID-19 salgını sırasında keşfettiğimiz gibi, bugün hala büyük bir önemi var.
Muhtemelen "Dolandırıcılık Olasılığı" veya "Sahtekarlık Uyarısı" tomurcuklarınızdan gelen aramaları görmüşsünüzdür. Peki, operatörünüze bu arayanların yasal olmadığını gösteren hediye nedir?
Gerçek şu ki, bu mega sellerden birini vurma şansınız her yıl aynıdır: yüzde 1.
Şanssız olanlar kimler? Ne zaman bir takım başarısız olursa, adı geçen takımın taraftarları şansa katkıda bulunan bir faktör olarak işaret edecektir. "İlk tur seçimimiz başarılı olsaydı, harika olurduk!" "Bunlardan birkaçını daha kazansaydık yakın oyunlar, playofflarda olurduk.
Steve Yzerman, Detroit'e gitmeden önce Tampa Bay'i yeniden inşa etti. NHL playoffları sağlam, eğlenceli, rekabetçi, zorlu ve entrikalarla dolu.
Brittney Griner ve Diana Taurasi tekrar altını hedef alıyor. Dün, Team USA kadın basketbol takımı, gelecek ay Tokyo'daki Olimpiyat Oyunları için tam 12'sini açıkladı ve henüz kesinleşmemiş olan erkek kadrosu şekilleniyor.
NEW YORK—Sahte bir hayal kırıklığıyla dilini şakırdatan Bill De Blasio, New Yorklulara "Her şeye rağmen bok gibi olmayan bir belediye başkanı bulmak o kadar kolay değil, ha?" dedi. Salı günü düzenlediği basın toplantısında. "Hey, hepiniz elinizden gelenin en iyisini yaptınız, ancak ulusal bir rezalet olmayacak bir adayı yönetmek düşündüğünüzden biraz daha zor görünüyor, değil mi?" dedi De Blasio, oy veren halkın şehrin geneli için sürekli bir utanç kaynağı olmaktan çok daha fazlasını oluşturacak birini seçme ihtimali karşısında belki de biraz fazla büyüdüğünü öne sürerken sırıtarak.
Sporcular imza stillerini Eugene, Oregon'daki ABD Olimpiyat atletizm ve saha denemelerine getirdiler
Gönderi, Kacey Musgraves ve yazar Cole Schafer'in New York City'de birlikte yürürken görüntülenmesinden sadece birkaç gün sonra geldi.
Robert Sanchez olayda bir kolu kırıldı, ancak ağabeyi Neithan Morales sayesinde daha kötü bir şey olmadı.
Khloé Kardashian, Keeping Up with the Kardashians'ın Pazar günkü özel toplantısının ikinci bölümünde kardeşi Rob Kardashian hakkında konuştu.