我有几个关于代码设计的问题。这可能很长。我会尽可能缩短它。
Q1) 依赖还是独立?
创建一个类并添加所需的功能,以允许对象更改自己的状态与由 Controller (又名 View Controller )更改的状态
我发现代码示例在尝试交流时是最好的:
注意:我减少了一些代码行。来自 http://www.techotopia.com/index.php/An_Overview_of_Objective-C_Object_Oriented_Programming 的原始代码.
无论如何,如果我必须为某个帐户设置帐户余额,建议我这样做:
@interface BankAccount: NSObject
{
double accountBalance;
long accountNumber;
}
-(double) getAccountBalance;
-(void) setAccountBalance: (double) x;
@end
// Implementation Section Starts Here
@implementation BankAccount
-(void) setAccountBalance: (double) x
{
accountBalance = x;
}
-(double) getAccountBalance
{
return accountBalance;
}
@end
//usage
BankAccount *account1 = [BankAccount alloc] init];
[account1 setAccountBalance: 1500.53];
----但是我相信我会在这样的 Controller 中编写它:-----
@interface BankAccount: NSObject
{
double accountBalance;
long accountNumber;
}
import "BankAccount.h"
@interface MeViewController : UIViewController
-(void)setAccountBalancedouble)x toAccountBankAccount *)tempBankAcc;
@end
@implementation myViewController
-(void) setAccountBalancedouble)x toAccountBankAccount *)tempBankAcc
{
tempBankAcc.accountBalance = x;
}
//USAGE
BankAccount *account1 = [BankAccount alloc] init];
[self setAccountBalance(Account1,1500.53)]
@end
因为我相信是我(meViewController)设置了AccountBalance,而不是帐户本身作为帐户只是一个帐户。
这是一个非常糟糕的主意吗?我可以通过他们的示例看到该对象可以照顾自己(独立),这意味着改变自己的状态,而我的方法说 BankAccount 只能通过/使用 Controller (依赖)修改
???
Q2) Controller 中应该/不应该包含哪些内容?
我还在某处读到, Controller 内部编写的代码应仅用于:
响应用户交互和更新 View
这是否意味着我不应该在 Controller 中执行以下操作:
从 NSUserDefaults 读取或写入。由于它是一个单例,我认为无论哪个 Controller 当前处于事件状态,写入它都会更容易?馊主意?
我知道我应该在 applicationDidEnterBackground 和 applicationWillTerminate 中保存数据(包括 NSUserDefaults),因此将数据保存在其他地方(例如,在另一个 Controller 中)是个坏主意。
Q3) 您最常使用哪些设计模式,哪些是您错误地滥用的?
单例:
我的理解是 [UIApplication sharedApplication]、[NSNotification defaultCenter] 和其他单例可以通过所有 Controller 访问,那么 NSObject 子类呢?还是 UIView 子类?
显然你可以使用 NSNotification 在模型更新时通知其他 Controller 。
有人可以告诉我何时使用以及如何使用它的示例吗?
也许当您导入一些具有与最初预期不同的属性的数据时,观察者可能会收到升级的数据模型的通知,这是您何时在数据模型中通知 Controller 的示例吗?
现在问题已经足够了。
抱歉,我不得不把它们全都从我的脑海中抹去:-)
本
Best Answer-推荐答案 strong>
第一件事:不要使用这个
@interface BankAccount: NSObject
{
double accountBalance;
long accountNumber;
}
-(double) getAccountBalance;
-(void) setAccountBalance: (double) x;
@end
这里,accountBalance ivar 是公共(public)的,而它应该是私有(private)的。
改为使用 @property :
@interface BankAccount: NSObject
@property (assign, nonatomic) double accountBalance;
@end
这将定义一个 setter:
- (void)setAccountBalancedouble)accountBalance { ... }
还有一个 setter/getter :
- (double)accountBalance { ... }
和一个名为 _accountBalance 的 私有(private) 实例变量 (ivar)。
然后,您可以在实现中使用:
@synthesize accountBalance;
它会像这样自动创建setter/getter:
- (void)setAccountBalancedouble)accountBalance {
_accountBalance = accountBalance;
}
- (double)accountBalance {
return _accountBalance;
}
关于ios - 需要一些关于 iOS 项目的面向对象设计的建议,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/12703020/
|