2012-07-07 69 views
1

可能重複:
Method Syntax in Objective C困惑目的C語法

我剛開始學習目標C和我有點困惑這個說法。

+(NSMutableArray *) array; 

這是我的理解:

  1. +意味着這是響應一個類(這使得該靜態方法)

  2. NSMutableArray是一個數組,可以一個方法有它的尺寸變化

  3. *指針(內存位置參考)

  4. array是類型爲NSMutableArray的數組的名稱。

  5. ()爲什麼這個方法需要括號中的對象的指針「(NSMutableArray的*)」

左右,我不知道如何概念化說這些部分的意思是作爲一個整體。你能解釋一下嗎?

回答

1

1,2,3的陳述是正確的。但第四個是,array是方法的名稱。第五種是,返回類型array方法是NSMutableArray *

最後array是類方法,它有NSMutableArray *返回類型,也沒有任何參數。

它看起來像- (void)viewDidLoadviewDidLoad是實例方法,它具有void返回類型,也沒有任何參數。

+0

從內存管理角度來看,爲什麼這個名字是'array'也是很重要的。在這種情況下,'array'遵循Cocoa約定,這對於學習很重要:任何以類的基本類型名開頭的類方法(比如'array','arrayWithObjects:'和'arrayWithArray:')應該返回一個被自動釋放的對象。與表達式[[NSMutableArray alloc] initWithCapacity:N]和[myArray copy](兩者必須最後調用'release或'autorelease')不同,'[NSMutableArray array]'和類似的方法有一個隱式'autorelease'。 – 2012-07-07 06:12:18

2

在C語法,這將被寫成:

static NSMutableArray *array(); 

NSMutableArray *是返回類型。 array是方法的名稱。有沒有參數,但如果有這將是這樣的:

+ (ReturnType)methodName:(ArgType)argName; 

,或者如果有多個參數:

+ (ReturnType)firstPartOfMethodName:(Arg1Type)arg1Name secondPartOfMethodName:(Arg2Type)arg2Name; 

這可能是混亂的點了很多的OBJ-C的新人。方法名稱在參數之間分割這一事實可能會讓來自其他語言的大多數程序員感到非常困惑。

它以這種方式排列的原因是爲了澄清論證。當使用類似的方法:

- (id)initWithBitmapDataPlanes:(unsigned char **)planes 
       pixelsWide:(NSInteger)width 
       pixelsHigh:(NSInteger)height 
      bitsPerSample:(NSInteger)bps 
      samplesPerPixel:(NSInteger)spp 
        hasAlpha:(BOOL)alpha 
        isPlanar:(BOOL)isPlanar 
      colorSpaceName:(NSString *)colorSpaceName 
       bitmapFormat:(NSBitmapFormat)bitmapFormat 
       bytesPerRow:(NSInteger)rowBytes 
       bitsPerPixel:(NSInteger)pixelBits 

(這是從Cocoa框架,用於作爲longest稱爲一個真正的方法),這是非常有幫助的,你知道首先將其自變量,第二,第三等