繁体   English   中英

在Objective C语法中使用*

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM