回答
你可以寫的聲明這樣:
- (void) drawRoundedRect:(NSRect)aRect inView:(NSView *)aView withColor:(NSColor *)color fill:(BOOL)fill
的後續調用(與4個參數)可能看起來像:
[self drawRoundedRect:rect inView:self withColor:[NSColor greenColor] fill:YES];
其中rect
是以前定義的NSRect,self
是一個NSView該方法被調用,從嵌套方法調用獲得的NSColor
對象以及常量布爾值YES
。
Jeff準確地描述了這些方法的樣子。如果你想看看它是什麼樣子的C函數,它看起來是這樣的:
void drawRoundedRect_inView_withColor_fill(MyObject* self, SEL _cmd, NSRect aRect, NSView* aView, NSColor* color, BOOL fill);
參數「名稱」的所有聯合起來,形成一個單一的方法名和兩個隱藏參數,自我和_cmd被添加到前面。
在Objective-C中,方法名稱被正確地稱爲「選擇器」,並且可以由一個或多個部分組成。如果該方法接受一個或多個參數,所述選擇器的每個部分的形式是:
selectorFragmentName:(ParameterType)parameterName
例如,你會看到方法聲明這樣一個從NSColor:
+ (NSColor*) colorWithDeviceRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;
在這種情況下,方法(選擇器)名稱是colorWithDeviceRed:green:blue:alpha: - 其餘的表示範圍( - 例如方法,+爲類),返回類型(NSColor * here)以及每個類型和名稱參數。
CRITICAL!與大多數其他語言不同,您不能在Objective-C中重載方法 - 這意味着您不能使用兩個具有相同選擇器但具有不同參數和/或類型順序的方法。例如,你不能有這兩種方法:
- (id) initWithObjects:(NSArray*)anArray;
- (id) initWithObjects:(NSSet*)aSet;
由於兩種選擇的名字是initWithObjects:的Objective-C不區分兩者。選擇器名稱被轉換爲唯一的整數以便進行極快的查找,這對動態運行時非常有用,但對於希望方法重載的用戶來說卻是一種失望。在像Java這樣的語言中重載的最常見情況是構造函數,這是Objective-C中的一個非問題,因爲alloc/init模式。對於其他方法,選擇獨特的名稱可以避免這個問題。
從風格的角度來看,由於參數在方法選擇器散佈,Objective-C的編程(和Xcode的)往往會對齊長選擇器的各部分在結腸爲了可讀性,既可用於聲明/定義:
+ (NSColor*) colorWithDeviceRed:(CGFloat)red
green:(CGFloat)green
blue:(CGFloat)blue
alpha:(CGFloat)alpha;
和調用:
NSColor* myColor = [NSColor colorWithDeviceRed:0.5
green:0.6
blue:0.7
alpha:0.9];
的空白是無關的編譯器。如果它讓你更容易閱讀和理解,絕對可以使用它。
- 1. 如何在.h文件中使用多個參數編寫方法的名稱
- 2. 如何使用命名參數編寫方法?
- 3. 如何爲使用流作爲參數的方法編寫unitTest
- 4. 如何使用performSelector:withObject:afterDelay:一個方法使用多個參數
- 5. 使用log4j2編寫自定義json消息的最佳方法
- 6. 如何編寫一個可變數量參數的C#方法?
- 7. 如何在ROS中編寫多個Twist消息
- 8. 如何使用WCF消息寫入多個對象
- 9. 用於編寫處理不同消息的單個函數的方法
- 10. 如何用C#/ .NET 4.0中的委託參數編寫方法?
- 11. 如何在界面編寫通用方法參數
- 12. 如何編寫使用擴展方法
- 13. 用ArrayList參數+爲每個循環編寫一個方法
- 14. 用兩個參數編寫一個S4泛型方法
- 15. 如何在SimpleHTTPServer中編寫消息
- 16. 如何用多個輸出參數編寫過程?
- 17. 如何使用多個參數公開dbus方法?
- 18. 如何使用多個參數創建方法xcode
- 19. 如何在performSelector方法中使用多個參數?
- 20. 如何編寫替代鏈式方法調用的可變參數方法?
- 21. 如何從C#中使用可選參數調用VB.NET編寫的方法
- 22. 重寫as_json方法使用參數
- 23. 如何使用WebDriver在JavaScript提示消息中編寫代碼?
- 24. 如何使用vim而不是vi來編寫提交消息?
- 25. 如何使用更多頁面編寫「最新消息」和「新聞菜單」
- 26. 何時使用 - 多種方法,多個參數或選項參數
- 27. 如何在消息中編寫多行文本?
- 28. 重寫方法的多態性參數
- 29. 重寫的方法與多態參數
- 30. 使用URI和DataContract類參數編寫webservice方法
這是多種方法,不是嗎? – Devoted 2009-07-01 00:25:26
沒有。該調用包含在一組[]中,因此它必須是單一方法。這是具有4個參數的單一方法。 – 2009-07-01 00:30:23