Ios 为什么要使用;“自我”;这意味着什么?
所以,我刚开始学习Objective-C,我遇到了这种“自我”的东西。我只使用过C语言,但我认为它也在java中使用,也许?有人能解释一下吗?下面是一个例子: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
- (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中的
display
不是一个UILabel*
——它可能是一个具有该类型的属性,或者是一个返回该类型值的方法,但这是一个完全不同的东西
你需要去读一些关于面向对象编程的东西。Objtovi-C中的
在您的示例中,您并不是使用
[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];