Próbowałem utworzyć właściwość, która jest tylko do odczytu. Chciałem zainicjować z wartością z klasy tworzącej instancję tej klasy, np.Inicjowanie właściwości readonly
@property (retain,readonly) NSString *firstName;
I próbował zainicjować to tak:
-(id)initWithName:(NSString *)n{ self.firstName = n; }
Kiedyś zrobiłam to, kompilator zgłosił błąd, że właściwość tylko do odczytu nie można przypisać. Jak mogę to zrobić?
Problem z powyższą implementacją polega na tym, że wartość nie została zachowana. Po dodaniu zatrzymania do nieruchomości, to przydział ustawi wartość na własność. A jeśli jakiś inny obiekt uzyska dostęp do tej właściwości, ta wartość będzie dostępna. Zmodyfikowałem również moje pytanie: – awsome
Dlaczego to byłby problem? Użycie 'firstname = [n retain]' sprawi, że firstName będzie wskaźnikiem na 'n'. Tak więc, gdy jakiś inny obiekt uzyska dostęp do tej właściwości, wartość będzie tam. :) – Rengers
Jeśli próbuję to zrobić w ten sposób, jeśli dostęp do tej właściwości, otrzymuję następujący wyjątek.Program otrzymał sygnał: "EXC_BAD_ACCESS". I ten błąd nie wynika z żadnej innej właściwości. Sprawdzałem to bardzo w debugerze. Ta właściwość pokazuje "poza zasięgiem". A jeśli przypiszę to,
self.firstName = n;
. wtedy wszystko działa dobrze. – awsome