@synthesize がインスタンス変数のゲッターとセッターを自動作成することを理解しています。= _something 部分を指定すると、ゲッター/セッターに特定のバッキング変数を使用するようコンパイラ/ランタイムに通知することを理解しています。
Objective-C はゲッター/セッターと共に _something 変数を自動作成しますか、それともインターフェース/実装ファイルでそのインスタンス変数を定義する必要がありますか?
@synthesize がインスタンス変数のゲッターとセッターを自動作成することを理解しています。= _something 部分を指定すると、ゲッター/セッターに特定のバッキング変数を使用するようコンパイラ/ランタイムに通知することを理解しています。
Objective-C はゲッター/セッターと共に _something 変数を自動作成しますか、それともインターフェース/実装ファイルでそのインスタンス変数を定義する必要がありますか?
問題は、ヘッダー ファイルの @property と実装の @synthesize が基になる ivar を作成するかどうか、または ivar をヘッダー ファイルにリストする必要があるかどうかです。ヘッダー ファイルの例:
@interface SomeClass : NSObject {
NSString *_someString; // Is this needed???
}
@property NSString *someString;
そして実装では:
@synthesize someString = _someString;
答えは、レガシー ランタイムまたは最新のランタイムのどちらを使用しているかによって異なります。iOS では常に最新のランタイムを使用しているため、この行は必要ありませんが、NSString *_somestring
この質問は Mac OS X に関するものです。Mac OS X の場合、Mac OS X 10.5 以降で 64 ビット プログラムを使用している場合は、最新のランタイムを使用しています。それ以外の場合は、レガシー ランタイムを使用しており、ヘッダー ファイルに余分な行が必要です。誤った情報が投稿されているため、こちらを参照してください: Objective-C ランタイム プログラミング ガイド。
申し訳ありませんが、質問の一部を読み違えました。@synthesize の部分にアンダースコアを付ければ大丈夫です。ivar を明示的に定義する必要はありません。