ObjC的自我是什么?我应该什么时候使用它?

6 objective-c self

self在Objective-C 中意味着什么?我应该何时何地使用它?它与thisJava 类似吗?

Ale*_*ski 14

self指的是您正在使用的当前类的实例,是的,它this在Java中是类似的.

如果要对该类的当前实例执行操作,请使用它.例如,如果要在类上编写实例方法,并且要在同一实例上调用方法来执行某些操作或检索某些数据,则可以使用self:

int value = [self returnSomeInteger];
Run Code Online (Sandbox Code Playgroud)

这通常也用于实例上的访问器方法(即setter和getter),特别是使用setter方法,如果它们实现额外的功能而不是仅仅设置实例变量的值,那么你就不必重复代码和当您想要设置该变量的值时,例如:

[self setSomeVariable:newValue];
Run Code Online (Sandbox Code Playgroud)

最常见的用途之一self是在类的初始化期间.示例代码可能如下所示:

- (id)init
{
    self = [super init];

    if(self!=nil) {
        //Do stuff, such as initializing instance variables
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

这将调用超类的(via super)初始化程序,这是在类层次结构中进行链接初始化的方式.self但是,返回的值设置为,因为超类的初始值设定项可以返回与超类不同的对象.


iKe*_*dac 5

self是所有Obj-C方法的隐含参数,它包含指向实例方法中当前对象的指针,以及指向类方法中当前类的指针.

另一个隐含的参数是_cmd,它是发送给方法的选择器.

请注意,你只能得到self_cmd在OBJ - C的方法.如果您声明一个C(++)方法,例如作为来自某个C库的回调,您将不会获得self或cmd.

有关更多信息,请参阅Objective-C运行时编程指南的使用隐藏参数部分.