什么意思*和&

时间:2013-02-06 12:24:23

标签: iphone ios objective-c xcode

今天我读了Carlo Chung的“Pro Objective-C Design Patterns for iOS”。 所以我读了一下Adapter Pattern并看到在protocol:

中声明了这个方法
-(void) command: (SetStrokeColorCommand *) command
        didRequestColorComponentsForRed: (CGFloat *) red
                                  green: (CGFloat *) green
                                   blue: (CGFloat *) blue;

您可以在第115页的书中看到它。 比使用这种方法

[delegate_ command:self didRequestColorComponentsForRed: &redValue
                                                  green: &greenValue
                                                   blue: &blueValue];

然后在第118页声明此方法

-(void) command: (SetStrokeColorCommand *) command
        didRequestColorComponentsForRed: (CGFloat *) red
                                  green: (CGFloat *) green
                                   blue: (CGFloat *) blue
 {
  *red = [redSlider_ value];
  *green = [greenSlider_ value];
  *blue = [blueSlider_ value];
 }

声明中的含义*(*红色,*绿色,*蓝色)是什么意思& (安培; redValue ...)?我看到&只有&错误的代码。

2 个答案:

答案 0 :(得分:6)

*是指针声明符或解除引用运算符。 在声明中,*表示指针变量。

&是运营商的地址。

旁注:

在尝试更高级的书籍之前,您应该先学习一门语言的基础知识。

答案 1 :(得分:2)

有些人指出,这些与指针有关。关于这一点有大量的信息,但是,如果你是新手,你可能会发现它有点令人困惑。

指出你需要知道的事情......

大多数情况下,您有一个输入和输出到函数。

- (int)roundMyFloat:(float)float;

这里的输入是一个浮点数,输出是一个int。

有时您需要多个输出到方法。常见的情况是您可能希望返回错误代码以及成功参数。

- (BOOL)doSomthing:(NSError**)error;

你会像这样使用它......

NSError* error = nil;
BOOL sucess = [myInstance doSomething:&error];
if (!sucess) 
{
     NSLog(@"Error: %@", error);
}

您将error作为'输出参数'传递。 doSomthing的代码将记录您的错误,并在需要时填写信息。

你需要在方法声明*中用两个(NSError**)声明error参数,因为你说你想要一个指向错误对象的指针而一个错误对象实际上是指针本身 - 所以它是指向指针的指针。

将错误传递给方法[myInstance doSomething:&error];时,使用&符号表示'获取我的错误对象的内存地址'。

在您的示例中,red greenblue是输出参数。方法didRequestColorComponentsForRed正在更改传递给它的值。与NSError示例不同,red greenblue不是对象,因此在方法声明中只需要一个星号。这表示'接受指向CGFloat值的指针作为参数'。

当您调用didRequestColorComponentsForRed方法时,使用&符号传递颜色组件,就像在NSError示例中一样。这表示取我CGFloat值的内存地址并将其传递给函数。

暂时不要过于担心&*语法 - 只需记住它的用途(输出参数)。你最终应该阅读它来实现它(实际上非​​常酷!)。

希望有所帮助 - 也不要害怕提问。