目標-c中私有方法的最佳實踐方法是什麼?這是一種只會被用作輔助方法的方法。objective-c私有與公共方法和聲明在頭還是不是?
特別是什麼我不明白的是:
- 是否有需要在頭文件作爲民營指定在所有的方法?也就是說爲什麼不把它從頭文件中刪除,並且
- 如果你不能將它從頭文件中刪除,那麼擁有私有方法有什麼意義?
- 或者是在objective-c中的情況下,沒有真正的私有方法這樣的事情,在這種情況下,只需指定頭文件中的所有內容並且根本不打擾私有方法?
感謝
目標-c中私有方法的最佳實踐方法是什麼?這是一種只會被用作輔助方法的方法。objective-c私有與公共方法和聲明在頭還是不是?
特別是什麼我不明白的是:
感謝
沒有必要指定在公共頭文件的方法。如果模塊中的類應該是「朋友」,您可能需要一個「私人」頭文件供模塊中的其他類使用。你甚至可以擁有一個「受保護」的頭文件,例如Apple用UIGestureRecognizerSubclass.h
做的那樣。儘管這只是慣例,但語言本身並沒有任何支持。
Objective-C中的私有方法只是一個沒有公開記錄的方法;任何方法仍然可以從任何地方調用,只要調用者知道它的名稱以創建適當的選擇器。不公開記錄方法的優點是您可以自由地更改或刪除它,而不必擔心向後兼容性。將它們排除在頭文件之外是不公開記錄它們的一種方法。
與您的答案沒有任何爭議 - 這在技術上是正確的。然而,簡單地省略一箇舊的C方式做事情的聲明。使用類擴展來在實現文件中聲明你的方法實際上是在Objective C 2.0中管理這個新的最佳實踐。只是想確保人們閱讀這篇文章。乾杯。 – DougW 2011-03-14 22:03:04
你可能想使用被稱爲「類擴展」是什麼。它們看起來相似,但不應該與類別混淆。這將允許您在.m文件中聲明私有方法,並且您將獲得所有良好的IDE更正和建議。
最好的做法(甚至是一個編譯器選項來檢查)是所有方法都是以某種方式聲明的。爲了窺探「隱藏」輔助方法,其聲明爲這樣在執行.m文件,如:
#import Client;
@interface myClass (Private)
- (void) privateMethod;
- (float) bankAccountBalanceForClient:(Client *)client;
@end
@implementation myClass
- (void) privateMethod;
{
//foo here
}
等。私有方法是一個名爲Private的myClass方法的類。這個類別可以在任何地方聲明,即使在一個名爲私有方法的主.h文件中也是如此,儘管這會成爲維護的噩夢。
因此,使用公共方法的公共.h文件和.m文件來聲明私有方法,您將所有方法聲明在某處。我使用這個編譯器選項來確保和強制它,以便所使用的任何方法實際上是在某處(或者我得到一個語法錯誤)聲明,因此我沒有找到任何運行時崩潰,因爲找不到方法。
只要記住,沒有這樣的事情作爲'私人'的方法,只要它不能從其他類調用。把它放在一個類別中*模糊了方法的存在,但是如果你的類實現了一個方法,它就會對它做出響應。 – 2011-03-14 00:04:25
哦......好的......大多數人仍然懶得試圖將它們標記爲私密,或者只是讓它們公開並將它們列在*中。h文件以及真實的公共方法 – Greg 2011-03-14 00:17:11
如果要爲用戶提供明確的界面,則不應在標題中列出不希望它們使用的方法。但是,如果你沒有在類擴展中聲明它們(請參閱我的答案),那麼將會失去編譯器時間語法檢查的所有優點。失語症的答案很好,但這是「C」的做事方式。類擴展是實現這一點的新「Objective C」方式。 – DougW 2011-03-14 21:58:21