Ios 为什么要使用;“自我”;这意味着什么?

Ios 为什么要使用;“自我”;这意味着什么?,ios,objective-c,cocoa-touch,self,Ios,Objective C,Cocoa Touch,Self,所以,我刚开始学习Objective-C,我遇到了这种“自我”的东西。我只使用过C语言,但我认为它也在java中使用,也许?有人能解释一下吗?下面是一个例子: - (IBAction)digitPressed:(UIButton *)sender { NSString *digit = [sender currentTitle]; UILabel *myDisplay = [self display]; //why this? } 为什么不只是这个 - (IBAction)d

所以,我刚开始学习Objective-C,我遇到了这种“自我”的东西。我只使用过C语言,但我认为它也在java中使用,也许?有人能解释一下吗?下面是一个例子:

- (IBAction)digitPressed:(UIButton *)sender
{
    NSString *digit = [sender currentTitle];
    UILabel *myDisplay = [self display];  //why this?
}
为什么不只是这个

- (IBAction)digitPressed:(UIButton *)sender
{
        NSString *digit = [sender currentTitle];
        UILabel *myDisplay = display;  //why not like this?
}
display是一个UILabel*

单词self指的是当前对象,在本例中是视图控制器实例,将其与方法名称display组合表示您正在向视图控制器self发送消息display。这将调用视图控制器实例中声明的方法display

您可以在视图控制器中声明显示方法,例如:

- (UILabel)display 
{
    //your display method implementation returning UILabel instance
}
UILabel *display = [[UILabel alloc] init];
对于第二个变量,它意味着您引用的是display变量。例如:

- (UILabel)display 
{
    //your display method implementation returning UILabel instance
}
UILabel *display = [[UILabel alloc] init];
单词self指的是当前对象,在本例中是视图控制器实例,将其与方法名称display组合表示您正在向视图控制器self发送消息display。这将调用视图控制器实例中声明的方法display

您可以在视图控制器中声明显示方法,例如:

- (UILabel)display 
{
    //your display method implementation returning UILabel instance
}
UILabel *display = [[UILabel alloc] init];
对于第二个变量,它意味着您引用的是display变量。例如:

- (UILabel)display 
{
    //your display method implementation returning UILabel instance
}
UILabel *display = [[UILabel alloc] init];

display
不是一个
UILabel*
——它可能是一个具有该类型的属性,或者是一个返回该类型值的方法,但这是一个完全不同的东西


你需要去读一些关于面向对象编程的东西。Objtovi-C中的自我>代码是当前对象引用,其他OO语言称之为代码>此< /代码> - java和C++都使用该名称。理解对象和方法是使用这些语言的基础。

display
不是一个
UILabel*
——它可能是一个具有该类型的属性,或者是一个返回该类型值的方法,但这是一个完全不同的东西


你需要去读一些关于面向对象编程的东西。Objtovi-C中的自我>代码是当前对象引用,其他OO语言称之为代码>此< /代码> - java和C++都使用该名称。理解对象和方法是使用这些语言的基础。

这里有一个很好的解释:

您的问题的关键部分是关于Objective-C 2.0 dot语法的部分:

Objective-C点语法

dot语法是在Objective-C2.0中引入的,并生成了大量 争论的焦点。一批经验丰富的长期Cocoa程序员 建议完全避免。其他人,比如克里斯·汉森,有一个 关于何时使用属性和点表示法的不同视图。 无论你站在哪一边,我想最重要的是 保持一致

无论如何,要了解点语法的主要内容是 以下两种说法的作用相同:

点只是更传统的Objective-C方法的一个捷径 呼叫任何时候你看到一个点,你都可以用等价物替换它 方括号方法调用语法。理解是很重要的 但是,这与写以下内容不同:

时间戳=[NSDate date];没有自我客体和点,我们就是 不再向对象发送消息,而是直接访问ivar 命名时间戳。因为这绕过了setter方法,所以我们将 在不首先释放旧NSDate的情况下覆盖时间戳ivar 对象我们也不会保留正在分配的新对象。 这两种情况都很糟糕

请记住,这些示例是在没有使用ARC的情况下编写的,因此有很多关于内存管理、保留、释放等的参考资料。但是,查看这些示例非常有用,这样您就可以了解ARC在后台所做的工作


在您的示例中,您并不是使用
[self display]
来引用实际的显示属性,实际上您是在引用“self”对象的实例方法,在本例中,它是您的UIViewController。

这里有一个很好的解释:

您的问题的关键部分是关于Objective-C 2.0 dot语法的部分:

Objective-C点语法

dot语法是在Objective-C2.0中引入的,并生成了大量 争论的焦点。一批经验丰富的长期Cocoa程序员 建议完全避免。其他人,比如克里斯·汉森,有一个 关于何时使用属性和点表示法的不同视图。 无论你站在哪一边,我想最重要的是 保持一致

无论如何,要了解点语法的主要内容是 以下两种说法的作用相同:

点只是更传统的Objective-C方法的一个捷径 呼叫任何时候你看到一个点,你都可以用等价物替换它 方括号方法调用语法。理解是很重要的 但是,这与写以下内容不同:

时间戳=[NSDate date];没有自我客体和点,我们就是 不再向对象发送消息,而是直接访问ivar 命名时间戳。因为这绕过了setter方法,所以我们将 在不首先释放旧NSDate的情况下覆盖时间戳ivar 对象我们也不会保留正在分配的新对象。 这两种情况都很糟糕

请记住,这些示例是在没有使用ARC的情况下编写的,因此有很多关于内存管理、保留、释放等的参考资料。但是,查看这些示例非常有用,这样您就可以了解ARC在后台所做的工作


在您的示例中,您不是使用
[self display]
引用实际显示属性,而是实际上引用了“self”对象的实例方法,在本例中,该对象是您的UIViewController。

[self display]
,或
self.display
,指
this.doSomethingCool();
[myObject doSomethingCool];