すべてのメソッドで使用する変数の値をどこに設定すればよいのか疑問に思っていました。たとえば、私の.hで次のように言います。
@property NSString *name;
次に、それを.mで合成します。どこに値を割り当てるので、関数で、たとえば-(NSString *)changeUsername:(NSString *) changes
、、-(void)deleteUsername
そのデータにアクセスできますか?
3 に答える
main()
コマンドラインプログラムで最初に呼び出されるものです。そこで(またはどこかから呼ばれてmain()
)やってみませんか?
プロパティについて話しているので、インスタンス化するクラスが必要です。そのクラスの指定された初期化子(-init
または同様のもの)は、プロパティやインスタンス変数を設定するための適切な場所です。
Cocoa Touchアプリが一部の初期化タグを延期する唯一の理由-viewDidLoad
は、ビューコントローラーが初期化時にビューをロードせず、一部のプロパティまたはivarがロードされるビューに関連しているためです。ビューがロード(または作成)されるまで、これらのものは明らかに設定できないため、-viewDidLoad
これらの種類のものを設定するのに最適な場所になります。
さて、あなたはあなたのクラスの初期化子でそうすることができます、そして実際、これはC++または多分Javaでのアプローチでしょう。Objective-cでは、通常、レイジーインスタンス化を使用します。これを行うのに最適な場所は、そのプロパティのゲッターです。
誰かがプロパティに値を割り当てると、セッターが呼び出され、すべてが正常になります。誰かが値を要求し、それがまだ設定されていない(nilである)場合は、オブジェクトを作成するか、ゲッターでデフォルト値を割り当てることができます。
// Override accessor for name
- (NSString*)name
{
if (!_name) {
_name = @"unknown";
}
return _name;
}
アクセサメソッドは、インスタンス変数に直接アクセスする必要がある唯一の場所です。