gpt4 book ai didi

objective-c - self 指的是谁?

转载 作者:行者123 更新时间:2023-12-03 17:30:54 25 4
gpt4 key购买 nike

我正在尝试理解关键字 self 的用法 假设我有两个类,其中一个称为AppDelegate 和一个名为 Photo 的代理。 Photo 是我在 MVC 范例中的“模型”类,AppDelegate 是 Controller 。在下面 Photo 类的 init 方法中。 self 指的是谁?

-(id) init
{
if( self = [super init] ){
[self setCaption:@"Default Caption"];
[self setPhotographer:@"Default Photographer"];

}

return self;
}

最佳答案

self 是接收消息的对象。在实例方法中,是接收消息的实例;在类方法中,它是接收消息的类。

因此,在 init 中,self 是您正在初始化的实例,可能是某个向其发送 init 消息的实例(希望)在从 alloc 收到它后立即。

如果您创建一个方便的构造函数,如下所示:

//Returns a new, autoreleased Foobar instance.
+ (id) foobar

这是一个类方法,因此在此方法中,self 将引用 Foobar 类:

{
return [[[self alloc] init] autorelease];
}

实现:

  1. self(类)发送 alloc 消息;假设您没有覆盖 alloc (通常不会),它将触发 NSObject 的实现,该实现将通过创建并返回一个未初始化的实例进行响应。
  2. 向该实例发送init消息;该消息命中您的 init 实例方法,该方法调用 super,执行任何必要的初始化,并返回 self (在 init 中,是实例)。
  3. 向该实例发送一条 autorelease 消息;同样,您通常不会覆盖它,因此它会触发 NSObject 的实现,该实现将实例添加到最近的自动释放池并返回它。
  4. 最后,返回新分配、初始化和自动释放的实例。

关于objective-c - self 指的是谁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3689528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com