什么"自我"是用objective-c init方法返回的?

时间:2015-02-07 20:15:38

标签: ios objective-c

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

    if (self) {
        // initialize instance variables here
    }

    return self;
}

阅读了Apple的文档后,我仍然对上述内容感到困惑。我熟悉其他语言中selfthis的概念,但在这里我们将self分配给超类init self = [super init];,然后检查是否返回nil。但后来我们在最后一行回归自我。我的意思是,通常回归self意味着"我回归自己"但是,由于我们之前已将self分配给super init,因此我们不会将super作为self而不是ourselves作为self返回?

编辑 - 我试图在上面尽可能清楚但在句子中使用self很棘手。希望有人可以提供帮助。

3 个答案:

答案 0 :(得分:0)

self与Java或C#中的this相同。

该行

self = [super init];

允许父类首先进行初始化。如果一切都很好(换句话说,self != nil)那么我们可以做任何我们需要做的初始化。

最后我们返回self

您必须记住,selfourselves正如您所描述的那样,它由父类和此类完成的初始化组成。

<强>更新

此类和父类需要合作以初始化self。我们需要通过调用[super init]为父类提供第一个镜头。完成后,它返回一个我们称为self的对象。然后,我们使用此子类定义的实例变量的值进一步初始化self。但是两个初始化器都在处理同一个对象。

答案 1 :(得分:0)

没有!

每个初始化程序都必须调用[super init]。这意味着您在示例中调用的超级初始化程序也是如此。

所有这些初始化程序都可以根据需要准备对象,以便最终准备好在类继承描述它时使用它。它们都在同一个对象上工作。 (这是OO的观点。一个对象可以完成其(超级)类所描述的所有内容。因此所有(超级)类都必须初始化该对象。)

self只不过是指向方法/初始化程序当前正在处理的对象的指针。它没有像#34那样的特殊含义;我正在回归自己&#34;。

请注意,没有init方法分配对象。这是通过[AClass alloc]完成的。

答案 2 :(得分:0)

让我用外行的语言表达。

在研究面向对象编程时,你必须阅读有关汽车以及普锐斯如何成为Car的对象的内容。 你基本上有一个超类Car,所有汽车都会继承,如Prius,Focus等。对于Prius来说,汽车,面向对象的术语和继承,Prius必须先从Car继承,然后添加Prius特定的属性/属性。

同样,您在Objective-C中创建的每个类(以及几乎所有面向对象的编程语言)都必须首先从父类继承。根类为NSObject(objective-c)。

[super init]初始化父类及其所有属性。在成功之后,您可以添加特定于您的类的属性/属性。

一个常见示例是当您对init进行子类化时覆盖UITableViewCell方法。

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self) {

        UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Foo"]];
        imageView.frame = CGRectMake(0, 0, 100, 50);
        [self.contentView addSubview:imageView];
    }

    return self;
}

此处,initWithStyle:reuseIdentifier:被覆盖。它首先调用[super initWithStyle:style reuseIdentifier:reuseIdentifier]。这会初始化默认UITableViewCell,并提供stylereuseIdentifier。您可以在此处访问UITableViewCell的所有属性。此外,imageView将添加到单元格中,该单元格仅适用于此单元格。

Object Initialization文件非常适合帮助理解这一点。