2012-12-15 25 views
11

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

+0

Peki, neden olmasın ...? –

+1

Soru "Neden kimse ister ..." veya "Amaç nedir ...", "Neden orada?" – Matoe

+1

Geçerli bir soru gibi görünüyor. Neden düşüşler? –

cevap

12

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.

+1

"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. –

-1

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.

2

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