我有一些關於在工作中使用屬性和實例變量的討論,所以我想找到一個wiki的答案。現在,我知道objective-c中沒有真正的私有成員類型,所有內容都非常公開。但是,我有點擔心我們應該如何設計我們的課程,並遵守面向對象的原則。我想聽聽這三種設計方法的意見:私人和公共成員應該如何在objective-c中實現?
答:根據各種職位甚至到斯坦福大學的一個新的iPhone開發課程,你應該隨時隨地使用屬性。然而,恕我直言,這種方法煞車OOP的設計原則,因爲在這種情況下,所有成員公開。爲什麼我需要將所有內部/本地實例變量發佈到外部?此外,如果您通過屬性使用合成設置器,而不是直接使用本地ivar,則會有一些(但仍然)開銷。這裏的一個示例:
//==== header file =====//
@interface MyClass : NSObject
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@property (nonatomic, retain) NSString *propertyForPrivateMember;
@end
B.另一種方法是聲明在頭文件的ivars(不宣相關性質)爲私有成員,並且在相同的標題文件,申報純特性(不宣相對的ivars),用於公衆成員。在這種情況下,Ivars將直接在課堂上使用。這種方法是有道理的,但不會使用屬性的所有好處,因爲我們在設置新值之前手動釋放舊值。這裏的一個示例:
//==== header file =====//
@interface MyClass : NSObject{
NSString *_privateMember;
}
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@end
C.要聲明純特性(不宣相對的ivars),用於在頭文件公共成員,並申報純特性(不宣相對的ivars)執行文件在專用接口私有成員。這種方法恕我直言,比第一個更清楚,但同樣的問題仍然存在:爲什麼我們必須擁有內部/本地成員的財產?這裏有一個例子:
//==== header file =====//
@interface MyClass : NSObject
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@end
//==== implementation file =====//
@interface MyClass()
@property (nonatomic, retain) NSString *propertyForPrivateMember;
@end
這個決定自由讓我有點困擾,我想從各個來源找到應該如何做的確認。但是,我無法在Apple文檔中找到這樣嚴格的陳述,所以請發佈一個鏈接到蘋果文檔,如果有的話,或任何其他理論,以清除這一點。
這個問題似乎很主觀,不可能回答正確的方法。 – Till
這個問題非常簡單 - 如何在Objective-C中實現私人和公共成員,以及在哪裏可以找到蘋果嚴格的聲音。 – Centurion
我懇求有所不同,但不會深入討論。作爲證明我的主張的一個暗示,你自己記下了例如斯坦福大學的課程建議在各處使用屬性。 – Till