あなたは何も見逃していません、それはスタイルの選択です。この方法を使用する場合_ivar、ivarまたはプロパティを簡単に間違えることはありません。また、Mike Wellerが述べているように、これはAppleが推奨するものです。
ivarと同じ名前の送信を渡すデリゲートを使用している場合にも役立ちます。例えば:
プロパティを宣言しtableView、ivarに対して同じことを行うと、コンパイラは次のtableViewようなメソッドで変数を再宣言することについて文句を言います。
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Dot some thing with the table object
}
クラススコープとメソッドスコープの両方に変数名tableViewがあり、どちらを使用するかを実際に判断できないためです。
Xcodeの最新バージョンでは、ヘッダーファイルが次のようになっている場合、ivarを宣言する必要はありません。
@interface MyTableViewController : UIViewController <UITableViewDelegate>
@property (nonatomic, weak) IBOutlet UITableView *tableView;
@end
そうすれば、もうプロパティにアクセスする必要はありません@synthesize。これは自動的に行われ、名前の付いたivar _tableViewも作成されます。self.tableViewただし、構文を使用してプロパティを介して変数にアクセスすることをお勧めします。
これには例外があります。スーパーコールにすでに存在するプロパティをどこに再導入する場合は、を呼び出す必要があります@synthesize。再び「_ivar」が作成されます。
もう1つの例外は、プリミティブ型を使用している場合、コンパイラーがを作成しないこと_ivarです。ヘッダーに作成する必要はなく @synthesize myInt = _myInt、ivarが作成されます。