Okunan bir özellik oluşturmaya çalışıyordum. Bu sınıfın bir örneğini oluşturan sınıfın bir değeriyle başlatmayı istedim, ör.Salt okunur bir özelliği kullanıma hazırlama
@property (retain,readonly) NSString *firstName;
Ve ben böyle başlatmak için çalıştı: Bunu yapan kez
-(id)initWithName:(NSString *)n{ self.firstName = n; }
, derleyici saltokunurluğun tahsis edilemez bir hata bildirdi. Peki bunu nasıl yapabilirim? Genellikle zaten herhangi init ve dealloc yöntemleri ayarlayıcıları atlamak için tavsiye edilir
firstName = [n retain]; //Or copy
:
Yukarıdaki uygulamamdaki sorun, değerin korunmamasıdır. Korumayı mülkiyete eklediğimde, bu ödev değeri mülke atayacaktır. Ve eğer başka bir nesne bu özelliğe erişirse, bu değer orada olacaktır. Sorumu değiştirdim – awsome
Neden bu bir sorun olur? 'Firstname = [n hold] 'işlevinin kullanılması, sadece' n' için bir işaretçiyi gösterir. Evet, başka bir nesne bu özelliğe eriştiğinde, değer orada olacak. :) – Rengers
Eğer bu özelliğe erişirsem bu şekilde yapmaya çalışırsam, şu istisnaları alıyorum.Program sinyal aldı: “EXC_BAD_ACCESS”. Ve bu hata başka herhangi bir özellikten dolayı değildir. Bunu hata ayıklayıcıda çok araştırdım. Bu özellik "kapsam dışı" gösterir. Ve eğer
self.firstName = n;
ile atarsam. o zaman her şey iyi çalışıyor. – awsome