3

すでに数回、私はプロパティを作りたいと思っていました。それはnonatomic同時にreadonlyです。

これには、ゲッターをオーバーライドして、インスタンスがすでに作成されているかどうかを確認できるという利点があります。そうでなければ、私はそれを簡単に作成することができます。

同時に、上書きから保護することができます。


.h

@property (strong, readonly, nonatomic) Foo *bar;

.m

- (Foo *)bar {
    if (!_bar) {
        _bar = [[Foo alloc] init];
    }

    return _bar;
}

私がこれを行うときはいつでも、コンパイラは私のためにインスタンス変数を作成しないので、_bar存在しません。

なんで?readonly nonatomicプロパティを作成するにはどうすればよいですか?

4

3 に答える 3

6

あなたの財産申告は正しいです。ここでの問題は、プロパティが として宣言されているためreadonly、コンパイラが基になるインスタンス変数を自動的に合成しなかったことだと思います。この場合の解決策は、自分で合成することです...

@synthesize bar = _bar;

于 2013-01-10T17:52:22.003 に答える
2

プライベート セッターを作成できます。

@interface YourClass()  // In the .m file 

@property (strong, readwrite, nonatomic) Foo *bar;

@end

次に、変数を割り当てるとき:

self.bar = [[Foo alloc] init];

編集

マーク・アダムの答えも正しいです。

于 2013-01-10T17:51:22.227 に答える
1

実装では、@ synthesize bar=_barを追加します。

于 2013-01-10T17:57:16.037 に答える