最近在看cocos2D裡面的code,尤其是CCMenu,因為我想要將一堆按鈕好好的排整齊,於是看到了裡面有個怪異的符號:va_list。
坦白說我跟C很不熟,我初學雖然有硬K過C,但那只限於書本,沒有實機操作。
通常我在建構CCMenu時,都是先把item建好,然後再用這些item去建立CCMenu物件:
CCMenu *menu = [CCMenu menuWithItems:ccmenuItem, nil];
可是仔細去看這個原始碼,裡面是這樣,我就在裡面直接說明:
+(id) menuWithItems: (CCMenuItem*) item, ...
{
va_list args; //製作一個va_list物件,叫做args
va_start(args,item);//從item開始,檢查到底有幾項參數
id s = [[[self alloc] initWithItems: item vaList:args] autorelease];
va_end(args); //結束
return s;
}
所以va_list指的就是該方法所收到的參數表示的”...“。舉個例子:
CCMenu *menu = [CCMenu menuWithItems:item1, item2, item3, item4, item5, nil];
後面有五個item。
所以va_list args指的就是item2到item5。
換句話說,在表示該方法時所寫的:
+(id) menuWithItems: (CCMenuItem*) item, ...
劃黃線表示的點點點,就是args所要表示的部分。
坦白說我跟C很不熟,我初學雖然有硬K過C,但那只限於書本,沒有實機操作。
通常我在建構CCMenu時,都是先把item建好,然後再用這些item去建立CCMenu物件:
CCMenu *menu = [CCMenu menuWithItems:ccmenuItem, nil];
可是仔細去看這個原始碼,裡面是這樣,我就在裡面直接說明:
+(id) menuWithItems: (CCMenuItem*) item, ...
{
va_list args; //製作一個va_list物件,叫做args
va_start(args,item);//從item開始,檢查到底有幾項參數
id s = [[[self alloc] initWithItems: item vaList:args] autorelease];
va_end(args); //結束
return s;
}
所以va_list指的就是該方法所收到的參數表示的”...“。舉個例子:
CCMenu *menu = [CCMenu menuWithItems:item1, item2, item3, item4, item5, nil];
後面有五個item。
所以va_list args指的就是item2到item5。
換句話說,在表示該方法時所寫的:
+(id) menuWithItems: (CCMenuItem*) item, ...
劃黃線表示的點點點,就是args所要表示的部分。
留言
張貼留言