Frage

Ich bringe mich Objective-C als heimliches Vergnügen, wenn Sie würde. Ich habe ein selbsternanntes starkes Verständnis für die Java-Sprache, so ist es nicht ein furchtbar schwer Übergang - es sicher Spaß though. Aber ach, meine Frage!

Ich versuche, etwas zu reproduzieren, die in PHP vorhanden ist: Späte statische Bindung. In PHP, kann ich einen Methodenaufruf mit dekorieren „static ::“, die dynamisch band diese Methode an den Aufrufer zur Laufzeit. Auf der anderen Seite, wenn das Schlüsselwort „self ::“ verwendet wird, ist die Bindung statisch und wird mit der Klasse zugeordnet ist, in dem sie sich befindet, unabhängig davon, welches Kind Klasse nennt.

In Obj-C, ich habe Schwierigkeiten, dieses Paradigma zu reproduzieren. Ich habe meinen Oberherren gefragt, Google, wie man spät in Cocoa statisch binden, aber ich glaube nicht, es ist möglich. Es kann etwas anderes genannt werden, oder es kann eine sehr über my-Kopf Abhilfe verlangen. Hier ist, was ich tue jetzt:

Übergeordnete Klasse Methode:

-(id) whoAmI {
 return ([self class]);
}

Ein Kind Klasse, Child, erstreckt Parent und nicht Instanz-Methode whoAmI außer Kraft setzen.

NSLog(@"Calling from PARENT: %@", [parent whoAmI]);
NSLog(@"Calling from CHILD: %@", [child whoAmI]);

Als ich die Nachricht an jedem der Klassenobjekte senden, dynamische Bindung tut, was es tun soll, und ich bekomme die folgende von NSLog ():

2010-09-21 11: 39: 07,484 WhoAmI [4803: a0f] Aufruf von ELTERN: Parent
2010-09-21 11: 39: 07,486 WhoAmI [4803: a0f] von KIND Berufung: Kinder

Schließlich möchte ich lernen - wenn möglich - wie Kakao zu bekommen dynamisch zu stoppen Bindung, so dass die whoAmI Methode immer das Objekt zurückgibt, in dem sie sich befindet (immer Parent). Ich möchte es auch eine Instanzmethode sein. Wie würde ich mich über das Tun dies?

-Sean

War es hilfreich?

Lösung

Actually Objective C has a powerful set of introspection features, and it is almost certainly possible to do what you want by referring to Apple's extensive Objective C Runtime documentation. This is a complete C API for accessing the inner workings of Objective C's object & class hierarchy.

If nothing else, by experimenting with this stuff you'll learn a lot about how the language works and it should help you in debugging difficult problems.

Andere Tipps

Change the method to incorporate the name of the Parent class (or the superclass):

-(id) whoAmI {
 return ([Parent class]);    //In this instance, Parent is the superclass
}

It just so happens that what I wished to create had to be brought about by statically binding my class message to the parent class itself: Parent.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top