私はこのトピックに関する情報を見つけることができませんでした、そしてそれについて私が知っていることのほとんどは完全な偶然によるものです(そして私のコードが機能しなかった理由を理解しようと数時間試みました)。私が見つけたほとんどのチュートリアルは、objective-cを学びながら、同じ名前の変数とプロパティを作成します。プロパティがすべての作業を実行し、変数がそこにあるように見えるため、重要性がわかりません。例えば:
Test.h
@interface Test : NSObject {
int _timesPlayed, _highscore;
}
@property int timesPlayed, highscore;
// Methods and stuff
@end
Test.m
@implementation Test
@synthesize timesPlayed = _timesPlayed;
@synthesize highscore = _highscore;
// methods and stuff
@end
私が知っていること
1)さて、今日(何時間も混乱した後)、プロパティをどれだけ変更してhighscore = 5091231
も、[test highscore]を呼び出そうとしても、_highscoreの値が返されるため、何も変更されないことがわかりました。これは(私が思うに)test.hで設定されたivarです。したがって、test.mでの変数の変更はすべて、highscoreではなく_highscoreを変更する必要があります。(ここで間違っている場合は訂正してください)
2)正しく理解している場合(おそらく理解していない)、test.hに設定されているivarは実際のメモリを表しますが、@propertiesはそのメモリにアクセスするための単なる方法です。したがって、実装の外では、プロパティを経由せずに_highscoreにアクセスすることはできません。
わからないこと
基本的に、この状況について私が得られないのは、ivarを使用する必要があるかどうか、または@propertyと@synthesizeを使用できるかどうかです。ivarは、実際には何もしないが私を混乱させる余分なコードのようです。私が見た最近のツチのいくつかはivarを使用していないようですが、いくつかは使用しています。それで、これは単なるコーディングの好みですか、それとも実際に重要ですか?私はAppleのドキュメントを検索しようとしましたが、そこで迷子になり、探しているものが見つからないようです。どんなガイダンスでも大歓迎です。