2011-12-06 7 views
2

私は、異なるプログラマーの両方の方法を見てきました。"self"はオブジェクトを呼び出すよりも安全ですか?

  • [[selfオブジェクト]方法]
  • [オブジェクトメソッド]

他のいくつかだけ使用[self.object方法]代わりの[[selfオブジェクト]方法]

自分で他のオブジェクトを呼び出さないようにしても安全ですか? 私は第二の方法がより読みやすいと思います。

どうすればよいですか?

+0

これらの「オブジェクト」が使用されているという文脈についてもう少し明確にすることは可能ですか?これらのオブジェクトはプロパティですか?たとえば、自分のクラスからプロパティを呼び出す場合は[self.object method]を、[object method]は通常オブジェクトのメソッドを呼び出します。 – 5StringRyan

+0

私は実際には一般的に話していますが、私は "Employee * john"のプロパティを持つ "Work class"を持っているとしましょう。私は "john"を初期化し、私は[john setSalary:10]のようにEmployeeオブジェクトのメソッドを使いたいWorkクラスのメソッドを書いています。私はそのようなことを私の心に持っています。別の例は、単なるtextFieldオブジェクトです。 [textField setIntValue:10] – Geocool

答えて

0

これはあなた次第です。彼らは単にプログラミングの異なるスタイルです。しかし、getterメソッドが単にobjectを返すだけでなく、毎回self.objectまたは[self object](同じことです)を呼び出す方が効率が悪くなる可能性があります。例えば

- (NSObject *) object { 
    // some random code here 
    return _object; 
} 

は、これら二つの例を検討:

NSObject *obj = [self object]; 
[[self object] method]; 

対の第2の方法は、 "ランダムコード" であるため、より効率的かもしれない

NSObject *obj = [self object]; 
[obj method]; 

getterメソッドは1回だけ実行されますが、最初の例では2回実行されます(毎回[self object]が呼び出されます)。

+1

これをチェックする前に効率が悪いと言ってはいけません。ループに入れて10億回実行し、どちらが速いかを確認します。 –

+0

ゲッターが単純にオブジェクトを返すよりも多くのコマンドを実行しているシナリオでは、効率が低下することがあります。それは必ずしも効率的ではありませんが、特定の状況では可能性があります。 –

+0

マイケルに言ったことを確認するプロジェクトを作成しました。私は "Person *"オブジェクトを合成し、NSLogをランダムコードとしてこのオブジェクトのゲッターを作成しました。私は両方の方法を試みた。私が[[self person]メソッドを使用したときにはgetterのNSLogは1つの出力を返しましたが、私は[person method]を使用したときにgetterをまったく使用しませんでした。そうだった;) – Geocool

0

私は個人的に[オブジェクトメソッド]を使用しています。ただし、[self.object method]または[[self object] method]を使用すると、名前の衝突がないことを保証します。私はこれが本当に個人的な好みの問題だと思う。私が捕捉し続ける一つの事は、_object構文を使って合成したプロパティを使用しているときです。そして、[_ objectメソッド]の代わりに[オブジェクトメソッド]を実行しようとしています。だから、それはあなた次第です。

関連する問題