@property
. Durumunuzda, readwrite özelliğini tanımlıyorsunuz. Bu, -myObject
ve -setMyObject:
'u uygulayacağınız anlamına gelir. Bunun ivarlarla hiçbir ilgisi yok. Şimdi, bu yöntemleri uygulamaya koymanın en yaygın yolu, bir ivar tarafından desteklenmelerini sağlamaktır. Bir kolaylık olarak, ObjC, @synthesize myObject=myObject_;
kullanarak otomatik olarak gerekli yöntemleri bir ivar deposu ile oluşturmanızı sağlar. Bu "myObject_
adlı otomatik olarak oluşturulan bir ivar özelliğini kullanarak özellik myObject
için gerekli yöntemleri oluşturun" diyor. Ivar myObject_
gerçek bir ivardır ve normal olarak erişebilirsiniz (genellikle yapmamalısınız, ancak erişimcileri kullanmalısınız).
@synthesize
kullanmak yerine, -myObject
ve -setMyObject:
'u uygulayabilirsiniz. Derleyiciye "bu özellik için yapılan uygulamalar hakkında endişelenmeyin; çalışma zamanında doğru şekilde işleneceğini" bildirmek için @dynamic myObject;
kullanabilirsiniz.
@property (nonatomic, readwrite, strong) MyObject* myObject;
bu aynı kavramsal edilir:
bir @property
arasındaki bazı farklılıklar ve sadece beyan yöntemleri, ancak ilke olarak, bu hat vardır
- (MyObject *)myObject;
- (void)setMyObject:(MyObject *)anObject;
Kendinizi hiçbir vardır ivar bildirme Burada gerçek etki. Yöntemleri bir şekilde uygulamanız gerekiyor. Adınız ivar @synthesize
kullanıyorsa, @synthesize
yeni bir ivar oluşturmaz. Bir uygulama meselesi olarak, insanları artık ivarlar ilan etmekten vazgeçiriyorum. İhtiyaç duyulan herhangi bir ivar oluşturmak için sadece @synthesize
ile kamu ve özel mülkleri kullanmanızı tavsiye ederim. Herhangi bir nedenden dolayı manuel bir ivarınız olması gerekiyorsa, bunları @interface
yerine @implementation
blokunda bildirmenizi tavsiye ederim.
Ve sorunuz nedir? Bunun için –