Jestem nowy w programowaniu obiektowym, a jedną z koncepcji, którą zajęło mi trochę czasu, jest niezmienność. Myślę, że żarówka zgasła ostatniej nocy, ale chcę zweryfikować:
Kiedy napotykam stwierdzenia, że niezmiennego obiektu nie można zmienić, jestem zdziwiony, ponieważ mogę na przykład wykonać następujące czynności:
NSString *myName = @"Bob";
myName = @"Mike";
Tam właśnie właśnie zmieniłem nazwę, niezmiennego typu NSString. Mój problem polega na tym, że słowo „obiekt” może odnosić się do fizycznego obiektu w pamięci lub abstrakcja „mojaNazwa”. Poprzednia definicja dotyczy pojęcia niezmienności.
Jeśli chodzi o zmienną, bardziej przejrzystą (dla mnie) definicją niezmienności jest to, że wartość niezmiennego obiektu można zmienić tylko poprzez zmianę jego położenia w pamięci, tj. Jego odniesienia (znanego również jako jego wskaźnik).
Czy to prawda, czy wciąż jestem zagubiony w lesie?
NSString
, to „ wskaźnik do iNSString
”, który nie jest niezmienny. I nic obiektywnego C wiem, ale zgaduję, że w swojej przykład@"Mike"
tworzy nową instancjęNSString
i przypisanie go do wskaźnika ,myName
. Więc nie zmieniłeś obiektu, którymyName
wskazywał, tylko to, na co wskazywał.