Kendimi bir yönteme aktarmam gerek, nasıl yapabilirim?Kendimi bir yöntem parametresi olarak nasıl geçebilirim?
Ne tür bir nesnenin kendiliğinden olduğunu bilmiyorum?
Ben
Kendimi bir yönteme aktarmam gerek, nasıl yapabilirim?Kendimi bir yöntem parametresi olarak nasıl geçebilirim?
Ne tür bir nesnenin kendiliğinden olduğunu bilmiyorum?
Ben
Eğer bir sınıf Foo
için bir @implementation
bloğunun içinde olduğunda:
Foo*
veya
id
olarak yöntem parametresi yazabilirsiniz anlamına gelir:
@class Foo, SomeCollaborator;
@interface SomeCollaborator
- (void) doSomethingWithMe: (Foo*) myself;
- (void) doSomethingWithMe2: (id) myself;
@end
@implementation Foo
- (void) someFooMethod {
[someCollaborator doSomethingWithMe:self];
}
@end
yöntemin imza (başka bir deyişle, nasıl bir yöntem arayüzünde tanımlanır) nedir :(id)dg
denedim?
Yoksa, sınıf A'nın bir örneğinin bu yöntemi çağırmasına ve parametrelerden biri olarak kendisine geçmesine izin vermek için B sınıfındaki bir yöntemi tanımlamak mı istiyorsunuz? Eğer öyleyse,: (id) gönderen genellikle bunu yapmak için genel bir yol olarak kullanılır. Bu yöntemin uygulanması çerçevesinde örneğin, NSWindow içinde
- (void)makeKeyAndOrderFront:(id)sender;
- (void)orderFront:(id)sender;
- (void)orderBack:(id)sender;
için ne yapacağını belirlemesine yardımcı olmak için böyle bir şey yapabilirsiniz:
- (void)makeKeyAndOrderFront:(id)sender {
if ([sender isKindOfClass:[NSWindowController class]]) {
// do something
} else if ([sender isKindOfClass:[MyCoolClass class]]) {
// do something
} else if ([sender respondsToSelector:@selector(whyDidYouOrderMeFront)]) {
// do something
} else if ([sender conformsToProtocol:@protocol(someCoolProtocol)]) {
// do something
} else {
// do something
}
}
doğru geliyor bana bu. (id) tüm olası nesneleri temsil eder. self
Foo*
olduğunu
@implementation Inspector
- (void)printClassOf:(id)instance {
NSLog("instance is of class: %@", [instance class]);
}
@end
@implementation SomeClass
- (void)someMethod {
Inspector *myInstance = [[[Inspector alloc] init] autorelease];
[myInstance printClassOf:self];
}
@end
'(id)' olarak belirterek sonucunun ne? Yöntemi nasıl arıyorsun? – BoltClock
Neden kendi kendini sınıfını bilmiyorsun? Bu sınıf aynı sınıfta değil mi ?! * id *, muhtemelen * NSObject ** gibi çalışmalıdır. – Eiko
* Db * 'den daha açıklayıcı isimler kullanmak isteyebilirsiniz. Bir hatayı düzeltmeniz gerektiğinde daha sonra kendinize teşekkür edersiniz. –