2010-05-07 25 views
6

Objective-C'de gerekli olan "kendi kendini" kullanıyor mu, yoksa sadece iyi bir uygulama mı? Her zaman kullanmamak için kullanmaya devam ettim ve hiçbir farkı gerçekten fark etmiyorum. Zaten ima edilmiyor mu?"Kendi" gerekli mi?

+0

Do you mean 'self.property = value' konumundan 'property = value' konumuna mı gidiyorsunuz? – JBRWilkinson

cevap

5

self gereklidir. Aynı zamanda, alıcılar/ayarlayıcılar aracılığıyla özelliklerine erişmek için zaman zaman yararlıdır, bu durumda , self.propertyname veya self.propertyname = value'da da kullanmanız gerekecektir. (Bu

+0

Nokta gösterimi yerine ileti gösterimi kullanırsam ne olur? Önemli mi? – Rob

+0

Hayır. Hala kendine ihtiyacı var. –

+0

gerçekten CLEAR cevabı, çünkü web'deki birçok öğreticide hepsinin aynı şey olduğunu söylediği için, teşekkürler – gbk

3

Örnek değişkenlere başvururken bu gerekli değildir. Bir temsilci ayarlarken gibi başka yönteme akım nesnenin bir başvuru geçmek istediğinizde gereklidir:

[someObj setDelegate:self]; 

akım nesne üzerinde aynı sınıfta bir yöntemi çağrılırken Ayrıca gerekli:

+2

Örnek değişkene atandığında, kopyalamak veya saklamak için ayarlayıcıya güveniyorsanız, kendini kullanmak gerekir. –

0

[self doMethod] 
Evet, Objective C yöntemi C/C++ gibi çağırır fakat

[öz doSomething] gibi bağlamlarda için, kendini gönderme mesajı kullanır olmadığından; ve self.myProperty;

gerekli.

Bir ivar'a erişiyorsanız, kendinize ihtiyacınız yoktur.

Bu yardımcı olur umarım.

-CV

1

Değişkenlerle uğraşmak için bağlıdır. Sentezlenmiş bir alıcı veya ayarlayıcı kullanmak isterseniz, nokta notasyonunu kendiniz kullanın. Eğer, iyi, o self mesaj göndermek için bir nesne için isterlerse

self.someProperty = @"blah"; //Uses the setter 
someProperty = @"blah"; //Directly sets the variable 
+0

Nokta işaretini kullanmanız gerekmediğini unutmayın. Ama çoğumuz onu seviyoruz. Yine de sizi uyarıyorum: nokta-notasyonu neredeyse bir nesneye mesaj göndermenin aksine işaretçi olmayan bir alandan bir alana erişiyor gibi görünüyor. Objective-C nesneleri yapılara işaret ettiğinden, 'self.someiVar = @" bu "bir örnek değişkenine erişemez; "self-> someiVar = @" bu "' (bir "self-> bit" bir sınıfın uygulanması dahilinde gereksizdir) kullanır. Yani, ne yaptığınızı ve ne yapmadığınızı anlıyorsanız nokta notasyonunu kullanın. –

1

Gerçek baskı gerekli her zaman değil. propertyname veya propertyname = value eşdeğer değildir, ama iyi bir uygulamadır, bu daha kolay başkalarının kodunuzu okumak için yapar çünkü.

Ve gereklidir farklı sınıflarda aynı isimde nesneleri olduğunda, o zaman "kendini" Keywork o aynı sınıfta nesneye başvuran yazılımınızı söyleyecektir. genellikle daha büyük projelerde happends

.

İlgili konular