- ベストアンサー
Obj-Cの@propertyを使用してC言語の構造体のメンバにアクセスできない問題
- iOS4環境で効率重視でC言語の構造体のノリであらゆるメンバにアクセスするコードを書いていますが、@synthesizeを使用してもメンバにアクセスできません。
- アクセスしても値が変わらず、参照しても0が返されるため、何か宣言が違うのか疑問に思っています。
- もし使用できない場合は@publicを使用してメンバを公開することも考えましたが、これも機能しません。C言語の構造体のようにアクセス制限なしにメンバにアクセスしたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
そうですねぇ、構造体でないといけませんか。Objective-Cなら普通はクラスを定義して使う感じですが……。とりあえず、以下のようにしてチェックしましたが、特に問題はなさそうです。クラスのプロパティに保管するならポインタでは。 typedef struct { int a; int b; } AAA; @interface Test : NSObject { AAA *aaa; } @property () AAA *aaa; @end @implementation Test @synthesize aaa; @end int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Test *test = [[[Test alloc] init] autorelease]; AAA a = {100,200}; test.aaa = &a; //test.aaa->a = 300; // とりあえずコメントアウト //test.aaa->b = 400; // とりあえずコメントアウト NSLog(@"a=%i,b=%i",test.aaa->a,test.aaa->b); [pool drain]; return 0; }
その他の回答 (1)
- harawo
- ベストアンサー率58% (3742/6450)
例示のコードは、じっさいプロジェクトに書いてコンパイルしようとすると、エラーが出るのですが……? 実践で書いているコードでなく、サンプルで示すためのコードだとしても、書き誤りのないようにしてもらわないと、検証のしようがありません。
お礼
申し訳ありません。行き詰まってしまって、へろへろの 状態で書き込んでしまいました。多分 atomic のスペルが間違っていたかもしれません。 お手数おかけしてすいませんでした。以後書き込む際には気をつけたいと思います。
お礼
ありがとうございます。 メモリの確保解放がいやらしくて(リークの元)、なるべく素の状態で構造体を 使いたいなぁと思っていました。どうせゲームだし、「きっちり書く」よりも「効率重視」です。 どうもありがとうございます。「簡単に」アクセッサでアクセスするのは難しいようですね。 教えていただいたやり方を参考に頑張ってみます。どうもありがとうございました。