2012-01-30 20 views
7

@interface içinde bir değişken ilanobjektif-c arayüzü - sadece mülke göre değişken bildirme? Obj c

@interface: NSObject { MyObject * myObject}

@ özelliği (güvenli, nonatomic) MyObject * myObject;

Vs. Sadece bir özellik olarak ilan

@interface: NSObject {}

@ özelliği (güvenli, nonatomic) MyObject * myObject; @end

Burada herhangi bir bildirme var mı? ivar ilan atlanıyor

Selamlar Hıristiyan

+3

Ve sorunuz nedir? Bunun için –

cevap

10

@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.

9

gayet olumlu - ama sen Xcode IDE Ivar'ın değerini görmek mümkün olmayacaktır. Bir gün Apple bunu düzeltebilir.

GDB veya lldb'de incelemek için ivar'ı "po" yapabileceksiniz. Bir arabirimi tanımlar, bir uygulamayı değil,

+0

+1 - Son zamanlarda hata ayıklayıcısına küfür ettim, ivarın ifşa edilmesini bildiren şeylerin hata ayıklayıcıya görünmesini sağlayamayacağımı fark etmedim! –

+0

Lütfen Apple ile bir hata raporu gönderin: bugreport.apple.com – zaph