2012-05-05 8 views
3

可能性の重複:
difference between accessing a property via “propertyname” versus “self.propertyname” in objective-c?self.propertyの使用とプロパティとの違いは何

私のクラスで

、私はプロパティのself.propertyを使用するかどうかわかりません、

dateFormatter = [[NSDateFormatter alloc] init]; 
    //or 
    self.dateFormatter = [[NSDateFormatter alloc] init]; 

両方とも正常に動作しているようです。これらの2つの使用法に違いはありますか?私は混乱しています。

+1

を解放しなければならないことを追跡する必要があります[http://stackoverflow.com/questions/5251600/difference-between-accessing- aプロパティを介してプロパティ名対自己プロパティ](0120-38600/difference-between-accessing-a-property-via-propertyname-versus-self-property) –

+0

Thx、実際に私はプロパティと_プロパティの間に別の混乱がある、この質問のために私を助けることができる? ur答えのための –

答えて

3

プロパティは、あなたがself.dateformator経由でそれを呼び出す今まであなたが

、オブジェクトと自己ゲッターとセッターの命名(のsetPropertyとgetPropertyメソッド)を生成して合成した場合、それがプロパティを呼び出します場合には、

あなたのケースでは、最初の行が適切ではなく、クラスのiVarに直接アクセスしています。コードの2行目でgetterメソッドとsetterメソッドを使用しています。

あなたの質問は何ですか? 、

違いはiVarアクセス​​(最初の行)で、y ouはオブジェクトを手動で解放する必要があり、1の保持カウントが増加し、割り当てられたメモリがそのオブジェクトに関連付けられます。一方self.propertyではメモリが割り当てられますが、appleプロパティ管理がこれを行うと、新しいブロックが変数に割り当てられます。保持カウントは再び同じになります。

メモリブロックが失われます。

ここでは、インターフェイスファイルのプロパティ属性にretainを書き込んだ場合、メモリ管理がコンパイル済みで終了するため、オブジェクトのプロパティを使用するのが良い方法ですが、有益なことを伝えたいと思います。 deallocメソッドでリリースを書くことを忘れないでください。そして今

NSArray* arr = [[NSArray alloc] init]; 
self.someProperty = arr; 
[arr release]; 

として

self.someProperty = [[NSArray alloc] init]; 

使用してのようなあなたがここにwritterを持っているコード行、ためにあなたの保持カウントを使用すると、1つのことをしたいと同じで、どこの世話をdon'dますこれを解放すると、あなたが書き込んだ場合、deallocメソッドで自動的に解放されます。

と以前書き1のために、あなたが重複する可能性のあるオブジェクト

+0

thx、本当に役立ちます! –

+0

あなたはウェルカムだよ – Saad

+0

しかし、XCode 4.2以来、自動参照カウントを使用すると、あなたのオブジェクトを解放する心配はありません;) – iJatrat

2

setter関数とgetter関数を使用する場合は、実際にself.propertyを使用できます。これがプロパティの主な機能です。自分でコードを作成することなく、セッターやゲッターメソッドを作成できます。今すぐあなたが離れている場合は、 プロパティを使用すると、getterやsetterメソッドのいずれにもアクセスしていません。しかし、オブジェクトの割り当てと初期化には、ステアまたはゲッターメソッドを使用していないため、これは問題ではありません。そういうわけで、両方の方法があなたのために働いています。

'self.property'は、プロパティのセッターメソッドとゲッターメソッドにアクセスします。

'プロパティ'は、プロパティのインスタンス変数にアクセスします。あなたの方法はgetterとsetter inface

関連する問題