我想知道爲什麼在書籍和Apple文檔有時一個方法有冒號作爲後綴,但有時不是。我想這意味着如果它沒有冒號,它沒有參數。另一方面,如果它有冒號,它只有一個參數。對還是錯?有沒有理由,我有時閱讀書籍「layoutSubviews Method」,有時候「drawRect:Method」?
回答
這是正確的,但它是一個簡單的錯字。您應該始終檢查文檔以確保任何方法的簽名以避免任何運行時錯誤。
與簽名的方法:
- (void)refresh
將被使用,如:
[myObject refresh];
與簽名的方法:
- (void)refreshView:(UIView *)view
將被使用,如:
[myObject refreshView:view];
最後,與簽名的方法:
- (void)refreshView:(UIView *)view updateLabels:(BOOL)update
將被使用,如:
[myObject refreshView:view updateLabels:YES];
目標C refreshView:
和refreshView
兩種不同的方法。第一個參數需要一個參數,另一個參數不需要參數。正如你所說。
這很重要,因爲那是方法的全名,並且您需要能夠在傳遞選擇器時正確寫入。
例如示出的片材時:
- (void)beginSheet:(NSWindow *)sheet
modalForWindow:(NSWindow *)docWindow
modalDelegate:(id)modalDelegate
didEndSelector:(SEL)didEndSelector
contextInfo:(void *)contextInfo;
的didEndSelector通常的形式是:
- (void)sheetDidEnd:(NSWindow *)sheet
returnCode:(int)returnCode
contextInfo:(void *)contextInfo;
等在beginSheet方法這將需要被傳遞到didEndSelector參數作爲:
@selector(sheetDidEnd:returnCode:contextInfo:);
獲取錯誤的選擇簽名將導致m深夜在調試時頭部劃傷。
幾乎看起來像是如果在objective-c中的方法實際上沒有方法名稱,bot只包含參數名稱(如果它有參數的話)。如果它沒有,那麼它有一個方法名稱。這是一個有效的陳述? – Thanks 2009-04-13 18:37:45
你說得對,尾部的冒號表示單個參數,在代碼中使用完整的包含冒號名字很重要 - 例如, @selector(drawRect:)
然而,雖然我無法在散文中找到一個例子,但我相信你偶爾會看到寫有沒有尾隨冒號的方法,只是爲了讓它看起來更好。我知道我在寫評論/文檔時會這樣做 - 例如「子類應該自定義doFoo方法」,當我的意思是doFoo:
。因此,如果您看到散文中的方法名稱,那麼檢查頭文件或類參考文檔以獲取正確的簽名可能是一個好主意。
- 1. 有沒有關於ORM背後原理的書籍?
- 2. 我想學習Struts.Is有沒有好的網站或書籍?
- 3. 是否有API讀取ePub書籍?
- 4. 需要幫助閱讀具有書籍格式的文件
- 5. asp.net:__doPostBack有時候沒有呈現
- 6. WP7書籍閱讀體驗
- 7. 有沒有書籍之間的映射ms-help://和http://msdn.microsoft.com
- 8. XML閱讀器沒有正確閱讀
- 9. 我有時會遇到錯誤,有時候我不會?
- 10. 我的RSS閱讀器崩潰時沒有互聯網連接
- 11. ANTLRv3沒有閱讀選項
- 12. Symfony沒有閱讀phpsessid right
- 13. 閱讀JSON文件有時工作,有時不工作(Python)的
- 14. ClassCastException沒有理由?
- 15. Google App Engine - webapp2 - 路由 - 沒有閱讀我的網址 - 有什麼不對?
- 16. 我有一本書(書籍)我想存儲在SQLite中
- 17. WPF圖像源綁定有時候有時候不會工作
- 18. Django1.9屬性錯誤在/書籍/類型對象'書籍'沒有屬性'對象'
- 19. 訪問查詢:本月閱讀的書籍和上次閱讀的時間
- 20. FEOF()的時候沒有達到
- 21. 測試什麼時候沒有屬性
- 22. .ajax()有時會返回錯誤,有時候不會有
- 23. 爲什麼在'有'的時候有'where'
- 24. 有時候在System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection擁有對象)
- 25. 有沒有什麼好理由在C++中使用'malloc',何時有'新'?
- 26. 有沒有(仍)有什麼好理由使用java日期/時間日曆API?
- 27. 有沒有理由寫.eqv。 。真正。?
- 28. 有沒有理由不放棄「var」?
- 29. 我什麼時候得到javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:沒有發現可信任的證書
- 30. 酷C#書,有沒有XNA?
謝謝。但是有意義的是,有人會寫文檔文本「refreshView:」而不是「refreshView:view」或者只是「refreshView」? – Thanks 2009-04-13 13:20:11
如果只有一種方法出現,它會。例如,如果一個API具有上述所有三種方法,那麼作者應該非常小心地指定他的確切含義。但是,如果只有一個refreshView方法,並且沒有其他人使用參數,則通常是可以接受的。 – 2009-04-13 16:16:32