另一个要考虑的因素:你想存储财产的价值吗?(例如通过 NSCoding 或在 Core Data 中)我想您需要为需要“保存”的内容创建属性(例如在“encodeWithCoder”中。决定要放入 encodeWithCoder 的内容可以帮助您决定要以哪种方式保存)定义事物)。
对于不需要保存并且可以轻松重新计算的东西,您可以在方法和只读属性之间进行选择(这在引擎盖下是等效的:只读属性只创建一个 getter 访问器方法,并且没有实例变量支持它)。所以这更多的是风格问题。
说到样式,如果您只对属性使用点表示法(就像我一样),您可能会想知道:- 我是否想以 foo.fullName 的形式访问全名,而不是与 foo.firstName 等其他属性有所不同和 foo.lastName ?- 或者您是否想通过使用 [foo fullName] 访问全名来有所作为,向世界展示这是经过计算的?
我创建了一个跟踪股票报价的应用程序,该模型的灵感来自 Big Nerd Ranch 书中关于 Objective C 的一个示例(顺便说一句,很好读)。以下是属性和方法的定义方式:
// properties
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *symbol;
@property (nonatomic, copy) NSString *currency;
@property (nonatomic, copy) NSString *market;
@property (nonatomic) int numberOfShares;
@property (nonatomic) double purchaseSharePrice;
@property (nonatomic) double currentSharePrice;
// Stock Calculation methods
- (double)costInLocalCurrency; // purchaseSharePrice * numberOfShares
- (double)valueInLocalCurrency; // currentSharePrice * numberOfShares
- (double)gainOrLossInLocalCurrency // valueInLocalCurrency - costInLocalCurrency
你可以看到它们被清楚地区分开来。BNR 在他们的书中根本没有使用点表示法,所以看起来都一样:[foo currentSharePrice] 或 [foo valueInLocalCurrency],但是当我对属性使用点表示法时,我会在 foo. currentSharePrice 和 [foo valueInLocalCurrency]。
希望这会有所帮助。