[英]Use of * in Objective C Syntax
我用一些客观的c语法苦苦挣扎。 有人可以在下面的实例方法中详细说明*的用法。
- (IBAction)sliderChanged:(id)sender{
UISlider *slider = (UISlider *)sender;
}
我意识到我们正在创建一个类型为UISlider的变量,然后在将其作为UISlider强制转换后将其设置为sender。 但是,我不明白*是什么以及为什么
UISlider slider = (UISlider)sender;
不行。
*,就像在C中一样,在类型中使用时表示指针(例如你的情况)并取消引用指针。
指针只是一个变量,它包含其他东西的内存地址,在你的例子中是一个UISlider对象。
所以在你的例子中,
UISlider *slider = (UISlider *)sender;
slider是UISlider *
类型,或者是指向UISlider对象的指针。
以下有关C中指针的教程也适用于Objective-C: 您需要了解的有关C中指针的所有内容
必须使用指针引用所有Objective-C对象,因为它们存在于堆而不是堆栈中。
您正在创建一个名为slider的变量,其类型为UISlider *,即指向UISlider的指针。
您将发送方的值分配给变量滑块,该指针是指向Objective C对象的指针,以便滑块和发送方指向同一块内存。
在Apple的Objective C中,所有对象都在堆上声明,并通过指针访问。
我认为混淆起因于使用(id):
- (IBAction)sliderChanged:(id)sender{
UISlider *slider = (UISlider *)sender;
}
Objective C的id类型或多或少等同于(NSObject *)。 它本质上可以指向任何类型的Objective C对象。 所以,实际上上面的代码是:
- (IBAction)sliderChanged:(NSObject*)sender{
UISlider *slider = (UISlider *)sender;
}
或多或少。 由于我们(程序员)知道发送者对象是UISlider,因此我们在将对象分配给UISlider *滑块时将其转换为(UISlider *)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.