2016-05-14 5 views
0

私のアプリにはユーザーの銀行口座であるAccountのクラスがあります。これにより、WithdrawalsDepositsという2つのクラスが初期化されます。彼らは次のようになります。クラスから親クラスへの通信?

Account.h

@interface Account : NSObject 

@property (nonatomic, copy) NSInteger *amount; 
@property (nonatomic, strong) Withdrawal *withdrawal; 
@property (nonatomic, strong) Deposit *deposit; 

- (id)initWithAmount:(NSInteger *)amount; 

- (Withdrawal *)withdrawal; 
- (Deposit *)deposit; 

@end 

Account.m

@implementation Account 

- (id)initWithAmount:(NSInteger *)amount { 
    self = [super init]; 
    if (self) 
    { 
     _amount = amount; 
     _withdrawal = [[Withdrawal alloc] init]; 
     _deposit = [[Deposit alloc] init]; 
    } 
    return self; 
} 

- (Withdrawal *)withdrawal { 
    return _withdrawal; 
} 

- (Deposit *)deposit { 
    return _deposit; 
} 

@end 

を理想的には、私がしたいことは[[account withdrawal] withdraw:50]を呼び出し、持ってできるようにすることです[account amount]も更新してください。これに取り組む最善の方法は何ですか?

+0

@vadianあなたは正しいです。私は、私のアプリで実際のコードをよりよくマッチさせるためにサンプルを書き直しました。 – user4992124

答えて

1

まず、それは整数へのポインタであるamountはタイプNSInteger *を持つべきであるということはほとんどありません、それはそれは整数であり、それは単にNSIntegerなければならないことをはるかに可能性があります。 NSInteger *の他のすべての用途にも同じです。これはamountの値がであり、というオブジェクトへの参照ではなく、オブジェクトへの参照を返すwithdrawalプロパティとは異なり、のオブジェクトではないためです。

理想的には、私がしたいことは[[account withdrawal] withdraw:50]を呼び出し、[account amount]も同様に更新されていすることができることです。これに取り組む最善の方法は何ですか?デザインにコメントなし

、あなたの撤退オブジェクトは、あなたのアカウントオブジェクトにアクセスする必要がある場合は、それはそれへの参照(取得する方法)が必要です。あなたのAccountが関連付けられているプロパティー(Withdrawal)と同じように、Withdrawalクラスの関連するプロパティがAccountであると考えるべきです。すべてのAccountインスタンスがWithdrawalインスタンスを参照し、 -

_withdrawal = [[Withdrawal alloc] initWithAccount:self]; 

あなたはサイクルを作成することがあり、これを行う:

_withdrawal = [[Withdrawal alloc] init]; 

になる:あなたの現在のWithdrawalオブジェクトを作成するときには、例えば、これを設定することもできますこれはAccountインスタンスを参照しています。サイクルそれ自体はであり、望ましくないオブジェクトが収集されないようにすることができれば悪くなりません。しかし、私はあなたのAccountcloseAccountという方法で終わると思われます。これは、必要に応じて任意のサイクルを壊すことができます。

うまくいけば、それはあなたに離れて仕事をすることを望みます。あなたのデザイン/コードがうまくいかないとわかったら、&をコード化したものと何が問題なのかを詳述する新しい質問をしてください。

0

これは子 - 親ではない構成の関係です。あなたはamountのゲッターを書き換えることができ、アカウントの実際の左の量を取得するには:ところで、NSIntegerインスタンスから*を削除

- (NSInteger)amount { 
    _amount = // set left amount, this value should come from Withdrawal class 
    return _amount; 
} 

を、その単純な整数値ではないポインタにします。

関連する問題