2011-08-30 34 views
7

正当我觉得我越来越熟悉Objective-C中所提到的符号完全把我下了兔子洞......Objective-C的符号** + -

**     双指针??

&     我可以&参考做什么样的事情,是一个@property?一个完整的对象?怪异的指针razzledazzle?

±     我看到两者+或 - 前法声明;我已经看到Java通过手动输入+来注释某些数据类型声明,并且在Eclipse中编译的魔法会将它们更改为 -

我很可能会在我的猜测中询问重复的问题和/感谢您的答复/编辑。一个方法声明之前

回答

5

正如您所知,指针指向一个对象的地址,并且是您引用对象的方式。 Objective-C中有时会使用双指针,主要用于返回NSErrors,如果发生错误,您希望返回地址(即指向错误对象(NSError)的指针),因此您传递的指针指向null并且调用者可以更改该指针,使其指向另一个指向NSError对象的指针的地址。

&符号(&)主要由较低级别的C API使用,例如,核心图形。它们被用来引用事物,比如当前的上下文。只要大多数代码在方法调用中使用方括号,就不会经常看到这些方括号。

在方法声明之前使用+或者 - 用于区分类(+)和实例( - )方法。在类本身(比如alloc)上调用类方法,而在该对象的实例上调用实例方法(例如init)。

2

-+指定一个实例方法和静态类方法。要使用你必须创建你的类的对象实例的方法之前,你可以调用它的方法,一个静态方法,可以直接从类类型

11

你越来越进入C部分是Objective-C的内置称为在之上。

**是一个指针的指针。由于C中的函数按值取值,这意味着你不能在该函数中改变参数的值。但是,通过提供间接级别并将指针传递给指针,可以更改该值。

&意味着它是一个参考。如果一个参数需要一个**并且你有一个*变量,那么传递一个参数给它。

Foo *foo; 
[self changeFoo: &foo]; 

- (BOOL)changeFoo: (Foo **)foo 
{ 
    // dereference the double pointer and assign a val = alloc init returns a * 
    *foo = [[Foo alloc] init]; 
    return YES; 
} 

objective-c/cocoa中的一个常见用法是NSError。这本质上是一个争论。

NSError *err; 
BOOL success = [self doSomething:@"Foo" error:&err]; 

- (BOOL)doSomething:(NSString*)withData error:(NSError**)error 
{ 
}