Nesneye yönelik programlamaya yeniyim ve kavramak için biraz zamanımı alan bir kavram değişmezlik. Sanırım ampul dün gece söndü ama doğrulamak istiyorum:
Değişmez bir nesnenin değiştirilemeyeceğine dair ifadelerle karşılaştığımda, örneğin aşağıdakileri yapabileceğim için şaşkınım:
NSString *myName = @"Bob";
myName = @"Mike";
Orada, değiştirilemez tipte NSString adımı değiştirdim. Benim sorunum, "nesne" sözcüğü bellekte fiziksel nesneye veya "myName" soyutlama anlamına gelebilir. Önceki tanım değişmezlik kavramı için geçerlidir.
Değişkene gelince, değişmezliğin daha açık (bana göre) bir tanımı, değişmez bir nesnenin değerinin sadece hafızadaki yerini, yani referansını (işaretçisi olarak da bilinir) değiştirerek değiştirilebilmesidir.
Bu doğru mu, yoksa hala ormanda kayboldum mu?
NSString
, değişmez bir " işaretçi veNSString
" dir. Ben objektif C şey bilmiyorum, ama senin örnekte tahmin ediyorum@"Mike"
yeni bir örneğini oluşturuyorNSString
ve atamadan pointer ,myName
. YanimyName
işaret eden nesneyi , sadece işaret ettiği nesneyi değiştirmediniz .