İşte bu kadar. Neden kimse böyle bir yöntem (en azından bir kamu API'si olarak) ister? Bunun için pratik bir kullanım var mı?NSObject uyumlu sınıflardaki -self yönteminin amacı nedir?
cevap
self
yöntemi, Anahtar-Değer Kodlaması (KVC) için kullanışlıdır.
KVC ile, bir nesneyi bir sözlük gibi ele alabilirsiniz. Nesnenin bir özelliğine, mülkün adını içeren bir dize kullanarak erişebilirsiniz, örneğin: [view valueForKey:@"superview"]
. Aşağıdaki gibi bir anahtar yolu içeren bir dize kullanarak bir özellik zinciri aşağı doğru yürürsünüz: [view valueForKeyPath:@"superview.superview.center"]
.
NSObject
'un self
yönteminden beri self
anahtarını veya anahtar yolunu kullanabilirsiniz: [view valueForKey:@"self"]
. Bu nedenle, anahtar yollarınızı programsal olarak oluşturuyorsanız veya bir dosyadan okuyorsanız, "self"
anahtarını anahtar olarak kullanarak özel bir durum yazmanızı önleyebilirsiniz.
Ayrıca bu gibi yüklemler self
kullanabilirsiniz:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self beginswith \"foo\""];
NSArray *filteredArray = [arrayOfStrings filteredArrayWithPredicate:predicate];
Ben NSPredicate
aslında bu durumda (belki KVC aracılığıyla) self
yöntemini kullanır mı bilmiyorum. Kesinlikle mümkün.
"SELF", "nil", "NULL" ve diğerleri gibi NSPredicates'te özel bir sabit olarak belgelenmiştir. Gerçek “kendi” yöntemiyle eşleştirilebilirdi, ama bana göre bu belge özel olduğunu ima ediyor. –
ObjC çalışma zamanı ile ilgili olduğunu düşünüyorum.
objc_msgSend(autoreleasePool, sel_registerName("drain"));
BOOL AppDel_didFinishLaunching(struct AppDel *self, SEL _cmd, void *application, void *options)
İlk argüman kendisidir. Sanırım bununla bir ilgisi var. Bütün dürüstlük içinde olsa da, bu yanıtı yazmaya başlamadan önce daha anlamlı oldu.
Özgün olarak neden "öz" eklendiğinden emin değilim, ancak işe yaradığı bir şey, iç işaretleyicileri nesnelere karşı korumaktı. Apple'ın resmi tavsiyesi, iç işaretçiyi bitirdikten sonra bir [foo self] çağrısı eklemek oldu; yöntem çağrısı işlevsel olarak hiçbir şey yapmaz, ancak derleyicinin o zamana kadar devam etmesini sağlar.
- 1. NSInvocation sınıfındaki setSelector yönteminin amacı nedir?
- 2. Flask-Oturum Açmada kullanılan "is_authenticated" yönteminin amacı nedir?
- 3. Facebook JavaScript SDK'sındaki işlev açıklama yönteminin amacı nedir?
- 4. Amacı nedir? * \\?
- 5. NSObject
- 6. Soyut sınıflardaki ikincil kurucuların kullanımı nedir?
- 7. NSMenuItem'in tag niteliğinin amacı nedir?
- 8. delegesi, NSObject
- 9. ValidationResult.Success alanının amacı nedir?
- 10. Scala.Predef'de $ kapsamının amacı nedir?
- 11. EXTRA_CFLAGS amacı nedir?
- 12. pdb dosyalarının amacı nedir?
- 13. Niyet kategorilerinin amacı nedir?
- 14. django: django.utils.functional.SimpleLazyObject'in amacı nedir?
- 15. .git/günlüğünün amacı nedir?
- 16. Yasemin-düğümünün amacı nedir?
- 17. TensorFlow'da tf.app.flags'in amacı nedir?
- 18. Ng çıkarma amacı nedir?
- 19. PrecompiledApp.config dosyasının amacı nedir?
- 20. ldexp'in amacı nedir?
- 21. C++ Dökümün amacı nedir?
- 22. .edmx dosyalarının amacı nedir?
- 23. Komut kapsamının amacı nedir?
- 24. Özet devletin amacı nedir?
- 25. Açısal-sıhhileştirmenin amacı nedir?
- 26. com.sun.org.apache.xpath.internal.operations.String'in amacı nedir?
- 27. Git repo'sunun amacı nedir?
- 28. Html.DisplayTextFor() noktasının amacı nedir?
- 29. <NSObject> 'anyObject'
- 30. [self release], [self dealloc] veya [super dealloc]?
Peki, neden olmasın ...? –
Soru "Neden kimse ister ..." veya "Amaç nedir ...", "Neden orada?" – Matoe
Geçerli bir soru gibi görünüyor. Neden düşüşler? –