回答
你可以寫的聲明這樣:
- (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. 如何使用performSelector:withObject:afterDelay:一個方法使用多個參數
- 2. 使用log4j2編寫自定義json消息的最佳方法
- 3. 如何編寫一個可變數量參數的C#方法?
- 4. 如何用C#/ .NET 4.0中的委託參數編寫方法?
- 5. 用ArrayList參數+爲每個循環編寫一個方法
- 6. 如何在performSelector方法中使用多個參數?
- 7. 如何使用多個參數公開dbus方法?
- 8. 如何編寫替代鏈式方法調用的可變參數方法?
- 9. 如何從C#中使用可選參數調用VB.NET編寫的方法
- 10. 重寫as_json方法使用參數
- 11. 如何使用vim而不是vi來編寫提交消息?
- 12. 如何使用更多頁面編寫「最新消息」和「新聞菜單」
- 13. 何時使用 - 多種方法,多個參數或選項參數
- 14. 重寫的方法與多態參數
- 15. 如何在消息中編寫多行文本?
- 16. AspectJ:使用'args()'參數綁定多個參數的方法
- 17. 如何在MFC中爲多個按鈕編寫一個消息處理程序?
- 18. 如何使用ActiveRecord模型的參數編寫自定義驗證方法?
- 19. 如何編寫私有方法RSpec的控制器中使用參數
- 20. 無法使用C#編寫Google Protobuf 2消息與單聲道
- 21. 如何編寫在REST web服務中有很多參數的方法
- 22. 如何爲沒有參數的方法編寫testmethods?
- 23. 如何編寫遠程鉤與參數和關係的方法
- 24. 如何在一個頁面上使用多個h:消息或p:消息?
- 25. 使用多個參數編寫帶有scala的懶惰咖喱
- 26. vb.net消息:沒有用於一個或多個必需參數
- 27. Java:如何從具有多個參數的方法調用一個參數
- 28. 如何在C#中不鼓勵使用方法編寫多個異常?
- 29. 如何編寫具有多個參數的帖子路由
- 30. 如何使用兩個字符串方法編寫程序?
這是多種方法,不是嗎? – Devoted 2009-07-01 00:25:26
沒有。該調用包含在一組[]中,因此它必須是單一方法。這是具有4個參數的單一方法。 – 2009-07-01 00:30:23