私は既に@synthesize
を読んで、この質問に関するいくつかの本当に素晴らしい情報を見つけました:What exactly does @synthesize do?と私はインスタンス変数とプロパティの違いを理解していますが、私が継承したコードでは、次のような状況で、それが何をしているのか(あるいは必要であれば)知りたいです。より多くのコードのコンテキストが必要な場合は、尋ねてください。私の例では、_managedObjectContext
へのポインタは限り私は、グローバル検索を行った後に言うことができるように定義されることはありません一方、だから、リンク答えMapView
とMapView1
からの例では、両方の.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:
@synthesize
はここでも何をしているのですか?_managedObjectContext
が他の質問のように定義されていないと、まだコンパイルされますか?あなたがプロパティのゲッターを提供してきたよう
プロパティ 'managedObjectContext'を宣言すると、コンパイラは自動的に' _managedObjectContext'という名前のivarを作成しますか?したがって、私の例では 'managedObjectContext'実装を' return [[NSManagedObjectContext alloc] init];と書くことができ、コンパイラは残りの部分を処理しますか?これを行うときに気にする必要のあるメモリリークの種類はありますか? – akousmata
@akousmataあなたのゲッターがちょっと特別なのではないでしょうか。私はそれをダンプし、そのオブジェクトを代わりに 'init'メソッドに割り当てるべきだと思います。はるかに一般的です。 – trojanfoe
私はそれを調べようとします、私は他のものの束を壊すことなくできるかどうかはわかりません。情報をありがとう。まだかなりiOSに新しいです – akousmata