2014-03-21 12 views
5

Ich studiere gerade den Beispielcode von Apple für Sketch und ich stolperte über eine Syntax, die ich vorher nicht gesehen habe. Es ist in SKTGraphicView.m in der Funktion moveSelectedGraphicsWithEvent:Was macht die [SomeClass self] -Syntax?

NSRect selBounds = [[SKTGraphic self] boundsOfGraphics:selGraphics]; 

ich vorher noch nie die [SomeClass self] Syntax gesehen haben. In diesem Fall ist self eine Unterklasse von NSView und boundsOfGraphics: ist eine Klassenmethode für SKTGraphic, die eine Unterklasse von NSObject ist.

+0

möglich Duplikat von [Using self in class Methode] (http://stackoverflow.com/questions/9028549/using-self-in-class- Methode) – dasblinkenlight

+5

Diese Frage ist anders als diese. Dies fragt nach einem Aufruf der '- [NSObject self]' -Methode, nicht nach der Verwendung des self "Schlüsselwortes", wie es normalerweise verwendet wird. –

Antwort

8

self Die Methode ist in der NSObject Protokoll definiert, so dass jeder Gegenstand es sich um eine Instanz einer Klasse sein, oder ein Klassenobjekt (vom Typ Class) unterstützt das Verfahren. Es gibt einfach das Objekt, um es auf genannt wird, das heißt so etwas wie:

- (id) self { return self; } 

So self auf einer Instanz gibt die Instanz, und auf einem Klassenobjekt gibt das Klassenobjekt. Die

folgende daher gilt: [x self] == x ist YES für alle Instanz und Klassenobjekte x

Und Ihre Linie entspricht:

NSRect selBounds = [SKTGraphic boundsOfGraphics:selGraphics]; 

Damit ist , was es tut. Warum Apple dies auf diese Weise geschrieben hat, ist eine andere Frage ...