gpt4 book ai didi

objective-c - 如何使用 self 创建对象?

转载 作者:行者123 更新时间:2023-12-02 07:49:37 24 4
gpt4 key购买 nike

我以为我在引用当前类(class)中的任何内容时理解了 self 的用法。在遇到此警告和随后的运行失败后,我用谷歌搜索了许多“定义 self ”或“ self 使用”的变体,但一无所获。这个问题是如何在没有警告的情况下创建一个对象,并理解为什么。

#import <Cocoa/Cocoa.h>

@interface Foo : NSObject {
Foo *obj;
}
-(void)beta;
@end

#import "Foo.h"
@implementation Foo
-(void)beta{
obj = [self new]; // 'Foo' may not respond to '-new'
}
@end

请注意,如果我用 Foo 代替 self,就没有问题。我以为类名和 self 是等价的,但显然编译器不这么认为。

  1. 也许对这里错误的解释不仅能解决我的问题,还能启发我对self用法的理解。

  2. 是否有任何关于正确使用 self 的教程?除了“self 是消息的接收者”之类的内容之外,我找不到任何其他内容,这对我没有任何帮助。

最佳答案

self引用消息的接收者,因此在这种特定情况下,self引用 -beta 所在的对象被调用。 (在类方法的范围内,self 引用类的 Class 对象)

现在,自 self在这种情况下,引用调用该方法的对象,编译器会发出警告,因为 new不是 Foo 的实例方法. new是继承自 NSObject类方法 .因此,执行此操作的正确方法是检索 Class来自 self 的对象,然后调用 new对此:

- (void) beta {  
obj = [[self class] new];
}

关于objective-c - 如何使用 self 创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4514308/

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