同期された関数がありますが、そのブロックのインスタンス変数の値を直接変更できないようです。Objective Cの同期ブロックにインスタンス変数を設定する
+(id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [super allocWithZone:zone];
//This is not allowed
something = @"hello";
//This is allowed
self.something = @"hello world!";
return sharedInstance;
}
}
return nil;
}
なぜこの場合ですか?私は直接アクセスする必要のある変数を持っています(そして、その変数を合成したくありません)。これをどうやって回避するのですか?
「許可されていません」とはどういう意味ですか?そのコードはコンパイルされませんか?実行時のエラーをトリガしますか?クラッシュした場合の具体的な情報を提供できますか? – Tim
@Darrenインスタンスメソッドのようなクラスメソッドを扱っていて、 '-init'が呼び出される前にivarsを設定しようとしているという事実から始めて、間違っています。 –
@Kevinしかしシングルトンオブジェクトの場合、クラスメソッド(+で始まるクラスメソッドはインスタンスメソッド( - )付き)と同じですか? –