[SomeClass self]语法有什么作用?

Seb*_*ian 5 cocoa objective-c self

我目前正在研究Apple for Sketch提供的示例代码,我偶然发现了一些我以前从未见过的语法.它SKTGraphicView.m在功能中moveSelectedGraphicsWithEvent:

NSRect selBounds = [[SKTGraphic self] boundsOfGraphics:selGraphics];
Run Code Online (Sandbox Code Playgroud)

我以前从未见过[SomeClass self]语法.在这种情况下,self是一个子类,NSView并且boundsOfGraphics:是一个类方法,SKTGraphic它是其子类NSObject.

CRD*_*CRD 8

self方法在NSObject 协议中定义,因此每个对象都是类的实例或类对象(类型Class)支持该方法.它只返回它被调用的对象,即:

- (id) self { return self; }
Run Code Online (Sandbox Code Playgroud)

因此self,在实例上返回实例,并在类对象上返回类对象.

因此,以下内容适用于:[x self] == x适用YES于所有实例和类对象x

你的行相当于:

NSRect selBounds = [SKTGraphic boundsOfGraphics:selGraphics];
Run Code Online (Sandbox Code Playgroud)

这就是它的作用.至于为什么Apple用这种方式写它,这是一个不同的问题......