2011-08-30 21 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 
{ 
}