İş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.
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? –