作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试理解关键字 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];
}
实现:
self
(类)发送 alloc
消息;假设您没有覆盖 alloc
(通常不会),它将触发 NSObject 的实现,该实现将通过创建并返回一个未初始化的实例进行响应。init
消息;该消息命中您的 init
实例方法,该方法调用 super,执行任何必要的初始化,并返回 self
(在 init
中,是实例)。autorelease
消息;同样,您通常不会覆盖它,因此它会触发 NSObject 的实现,该实现将实例添加到最近的自动释放池并返回它。关于objective-c - self 指的是谁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3689528/
我是一名优秀的程序员,十分优秀!