2016-04-15 6 views
1

私は既に@synthesizeを読んで、この質問に関するいくつかの本当に素晴らしい情報を見つけました:What exactly does @synthesize do?と私はインスタンス変数とプロパティの違いを理解していますが、私が継承したコードでは、次のような状況で、それが何をしているのか(あるいは必要であれば)知りたいです。より多くのコードのコンテキストが必要な場合は、尋ねてください。私の例では、_managedObjectContextへのポインタは限り私は、グローバル検索を行った後に言うことができるように定義されることはありません一方、だから、リンク答えMapViewMapView1からの例では、両方の.hファイルで定義された「取得」実装が提供されている場合、@synthesizeは何を行いますか?

// example.h 
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;  

// example.m 
@synthesize managedObjectContext = _managedObjectContext; 

//... later on in example.m 
- (NSManagedObjectContext *)managedObjectContext {   
    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 

    _managedObjectContext = [[NSManagedObjectContext alloc] init]; 
    return _managedObjectContext; 
} 

@synthesizeキーワードを使用し、具体的な定義をmanagedObjectContextとして実装ファイルに提供しています。

だから私の質問は本当に2:

  1. @synthesizeはここでも何をしているのですか?
  2. _managedObjectContextが他の質問のように定義されていないと、まだコンパイルされますか?あなたがプロパティのゲッターを提供してきたよう

答えて

3
  1. ありません。
  2. このプロパティは、_managedObjectContextと呼ばれるデフォルトのバッキングインスタンス変数を提供するためです。

注:これらの日はすべて@synthesizeにする必要はありません。

+0

プロパティ 'managedObjectContext'を宣言すると、コンパイラは自動的に' _managedObjectContext'という名前のivarを作成しますか?したがって、私の例では 'managedObjectContext'実装を' return [[NSManagedObjectContext alloc] init];と書くことができ、コンパイラは残りの部分を処理しますか?これを行うときに気にする必要のあるメモリリークの種類はありますか? – akousmata

+0

@akousmataあなたのゲッターがちょっと特別なのではないでしょうか。私はそれをダンプし、そのオブジェクトを代わりに 'init'メソッドに割り当てるべきだと思います。はるかに一般的です。 – trojanfoe

+0

私はそれを調べようとします、私は他のものの束を壊すことなくできるかどうかはわかりません。情報をありがとう。まだかなりiOSに新しいです – akousmata

0

今日のフレームワークでは、@synthesizeは必要ありません。 Propertyはフレームワークによって自動的に合成されます。

+1

これは質問に答えません。また、Objective-Cプログラミングでは特別な意味を持つので、「フレームワーク」という言葉には注意が必要です。 – trojanfoe

+0

ええ、あなたは正しいと思います。私は間違った単語の枠組みを使用したしかし私は異なった意味で話していました。私は客観的な枠組みの中でフレームワークを意味していません。上記のように指摘された – Lion

+0

の場合、この回答は役に立たず、間違っています。 -1。 –

関連する問題