2011-11-20 8 views
0

私の理解から、以下のゲッターメソッドの両方が実際のオブジェクトを参照しています。 2つの違いは何ですか?
2回目のゲッターメソッドを使用する理由とその理由を教えてください。値を返し、参照を返すアクセサーを返すアクセサ?

- (MyObject *)myObject 
{ 
    return _myObject; 
} 

- (void)getMyObject:(MyObject **)myObject 
{ 
    if (!myObject) 
    { 
     *myObject = _myObject; 
    } 
} 

答えて

4

もう1つは使用しません。

標準の規約に従わないことで、後でユーザー/個人を混乱させたくない場合を除きます。

また、例えば返すことができ、データの別の部分があった場合は、より理にかなって方法の重要な結果がYES/NOあるNSManagedObjectContext

- (BOOL)save:(NSError **)error 

を見て、それは保存したが、その後、私たちでしたエラーがあった場合には、NSErrorオブジェクトを調べて検査することもできます。

+0

ポールは言った。そのメソッドが成功/失敗を返し、失敗の場合にエラー参照を渡さない限り(標準のCocoaエラー処理パターン - いくつかのメソッドは成功/失敗を返すことに注意してください。また別の型の参照渡し値)*または*このメソッドは、複数の参照渡し戻り値を返します。 – bbum

0

Objective Cでは、 "object"はCのポインタなので、Object値は実際には構造参照と同じです(Objective Cランタイム間でコードを移植する場合は隠しフィールドを持つ不透明な構造) 。

したがって、「対」はありません。

YouRの最初の例は両方です。

アルゴリズムが参照、またはポインタへの参照を必要とする特別な状況がありますが、あまり一般的ではありません。それはあなたの2番目の例です。