MacOSでObjective-Cの変数について

このQ&Aのポイント
  • MacOSでObjective-Cの変数について困っています。クラス変数が分からないため、VBと同じ動きをするプログラムを作ることができません。
  • 文字列の変数に値を代入してタイマーに渡したいのですが、宣言方法に困っています。数値は参照できますが、文字列は参照できません。
  • 文字列をタイマーから参照するためにはどのように文字列を宣言すれば良いか分かりません。ご教授いただけると助かります。
回答を見る
  • ベストアンサー

MacOSでObjective-cの変数について

お世話になっております。 Windows用にVBで作ったプログラムを、Mac用にも作ることになりました。 Objective-cでVBと同じ動きをするように作りたいのですが、クラス変数が分からないので困っています。 最初に文字列の変数に値を代入してタイマーに渡したいのですが、先頭付近に「NSString *moji」と「int kazu」を宣言すると、数値は参照出来ますが文字列は参照出来ません。 「static NSString *moji」等いろいろ試しましたがエラーで止まってしまいます。 文字列をタイマーから参照するためにはどのように文字列を宣言すれば良いか、ご存知の方が居られましたらご教授をお願いいたします。 お手数をお掛け致しますが、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

Objective-Cに、「クラス変数」はありません。「インスタンス変数」のことをおっしゃりたいのでは? インスタンス変数は、決まった場所で宣言します。そこで宣言しなければ、単なるC言語のグローバル変数と扱われます。 ※いうまでもなく、Objective-Cのインスタンス変数と、C言語のグローバル変数は、別物ではありません。前者は後者に包含されると認識してください。 ヘッダファイルの「@interface」のあと、スコープ「{~}」の中に宣言する。 実装ファイルの「@implementation」のあと、スコープ「{~}」の中に宣言する。 例1: #import <UIKit/UIKit.h> @interface MyClass : NSObject { NSString *moji; int kazu; } @end 例2: #import "MyClass.h" @implementation MyClass { NSString *moji; int kazu; } @end ただし、今流のObjective-Cの流儀では、インスタンス変数ではなく、プロパティを多用することが推奨になっています。これは、メモリの確保と解放を自動化する、ARCという機能を有効に利用するために、プロパティの利用が有効だからです。 ※古いObjective-Cに関する文献だけでなく、最新のバージョンの文献をあたることを、強くお勧めします。じつはいま、ひじょうに速いスピードで、Objective-Cの仕様が新しくなっているので、

ZGMF-X56S
質問者

お礼

ありがとうございます。 教えて頂いた通りやってみます。 ヘッダファイルにも宣言が必要なのはなんとなく分かっていましたが、ビルドしてエラーが出なかったのでOKだと思っていました。 Objective-Cが分かっていないまま作っているのでヘッダファイルの意味が分かっていませんでした。 プロパティも使えるように勉強します。 最新の情報も調べるようにします。

関連するQ&A

  • C(char *s1)の文字列をObjective-Cの文字列(NSS

    C(char *s1)の文字列をObjective-Cの文字列(NSString *s2)にするにはどうしたらよいのでしょうか? char s1[] = "abc"; NSString *s2 = [[NSString alloc] initWithUTF8String:s1];  // (A) NSLog(@"s2=[%s]", s2); 結果がabcかなと思っていましたが、読めない変な文字が表示されました。 (A)を NSString *s2 = [NSString stringWithFormat:@"%s", s1]; に変えても同じでした。 s1のC文字列は日本語を含まないアルファベットの文字列なのになぜ?と 困っています。 Objective-Cの初心者で申し訳ありません。

  • 変数 と 配列

    int[] kazu1 = new int[3]; int[] kazu2 = new int[3]; int[] kazu3 = new int[3]; int[] kazu4 = new int[3]; int[] kazu5 = new int[3]; int[] kazu6 = new int[3]; int[] kazu7 = new int[3]; の配列と int kazu1, kazu2, kazu3 ~ kazu19, kazu20, kazu21; と変数宣言とでは どちらがどちらが メモリ消費 を抑えれますか? 確保スピードが速いですか? 教えてください

    • ベストアンサー
    • Java
  • C++ 静的クラスの役割が分からない

    こんばんは。 C++で静的オブジェクトがなんなのか試しにプログラミングしているんですが どんな役割があるのか試してもよく分かりません。 static class HOGE { public: int *hoge; private: int value[2]; char moji[6]; public: HOGE() { cout << "HOGE\n"; } void MOJI() { strcpy(moji, "MOJI\n"); } void TEST() { cout << "moji = " << moji << endl; } static void staticMOJI() { } }sObj; sObjからは静的メンバ関数と静的メンバ変数は呼び出せるようです。他は呼び出せません。 そのようにするためにstatic宣言をするものなのでしょうか? このsObjからメンバ変数(*hoge)を呼び出すことは無理なんでしょうか?

  • 文字列をint型に変換したいのですが

    文字列をint型に変換して、計算に使用したいのですが うまくいきません。 char moji[0] = '1' moji[1] = '2' moji[2] = '3' この文字列をひとつずつint型の変数に代入したいのですが atoi関数を使用した場合、文字列全ての値が変換されてしまいます。 どうしたらいいのでしょうか? お答えいただけるとありがたいです。

  • Objective-C文字列からC言語文字列に変換したいのですが、どう

    Objective-C文字列からC言語文字列に変換したいのですが、どうすればよいでしょうか? C言語からObjective-cなら NSString *cToOc = [[NSString alloc] initWithCString:"結果" encoding:NSUTF8StringEncoding]; NSLog(@"%@", cToOc); でよいのですが、その逆が知りたいです。 あとこの cToOcは以下のように解放しないといけないのでしょうか? [cToOc release];

  • Objective-CとCの結合について

    今Cの関数から文字列をもらってObjective-Cでウィンドウに表示させようとしているのですが、initWithCStringとかstringWithCStringの使い方がよくわかりません。今具体的にいうと #import "test.h" @implementation test +(void) testes:(NSString *)aaaa { [ output setStringValue : aaaa ]; } @end void Output_window(char *cccc) { NSString *aaaa; aaaa = [aaaa initWithString:aaaa]; [test testes : aaaa]; } こんなソースを書いてます。*ccccはCの文字列でoutputはoutletです。Output_windowをCソースのほうで呼び出して文字列をもらっています。どこがおかしいんでしょうか?指摘していただけませんか?最後の行でwarningが出るんですがそこだけがおかしいのかよくわかりません。Objective-Cをはじめて一週間程度ですので文法のことがいまいちよくわからないのでよろしくお願いします。 環境はMacOSX、ProjectBuilderとInterfaceBuilderでcocoaです。

  • クラス変数について質問

    Javaのオブジェクト指向を解説した参考書で現在勉強しているのですが、その参考書のある問題の答えの解説として「クラス変数は参照変数なので参照以外を代入できません」と書いてありました。 でも、例えば、static int n=0と書けば、0をnに代入できます。 因みに、「クラス型の変数」は参照しか代入できないのはわかっています。 よって「クラス変数」は誤植で、正しくは「クラス型変数」なのでしょうか?

    • ベストアンサー
    • Java
  • objective-Cについてご相談があります。

    objective-cを勉強しているのですが、 以下のメソッドの内容がいまいち分かりません。 どなたか解説して頂けないでしょうか・・・ ログを取ると、 「1:1   2:1」 、 「1:1  2:2」 といった感じで、2つ目の数値が、ボタンを押すたびに 増えていくのですが、この内容がどういった所に使われる のかが分かりません。 ------------------ここから--------------------------- // [変数]ボタン押下 - (IBAction)pushButton01:(id)sender { // 自動変数 auto int i01 = 0; // autoは普段省略されている i01++; // i01 = i01 + 1;と同義 NSLog(@"1:%d", i01); // 静的変数 static int i02 = 0;// どんどん増えていく i02++; NSLog(@"2:%d", i02); } --------------ここまで---------------------------- 以上、お手数ですが、何卒宜しくお願い致します。

  • 【Objective-C】文字列の連結でいい方法ありませんか?

    Objective-Cで文字列、NSStringの連結をするのに、stringByAppendingString:を使って以下のように書きました。 NSString *str1 = @"AAA"; NSString *str2 = [str1 stringByAppendingString: [NSString stringWithCString: "BBB" encoding: NSUTF8StringEncoding]]; しかし、この冗長なコードを何度も書くのは大変です。 そこで、マクロを使って以下のように整理してみました。 #define AS(A,B) [(A) stringByAppendingString:([NSString stringWithCString: B encoding: NSUTF8StringEncoding])] NSString *str2 = AS(str1,"BBB"); 少しはマシになりましたが、できれば+演算子を使って、以下のような、直感的にもわかるコードにしたいです。 NSString *str2 = str1 + "BBB"; NSStringクラスの+プラス演算子を書き換えて、(メソッドオーバーライド) NSString *str2 = str1 + "BBB"; の様ななコードを書く事はObjective-Cで、できるのでしょうか? 以上、ご指導のほど、宜しくお願いいたします。

  • [C#]Public変数の使い方

    今までVBを使っており、C#は初心者です。 VBでは、各関数にまたがって使う変数は、 private Hensu as integer Sub Kansuu1() Hensu = 2 Call Kansuu2() End Sub Sub Kansuu2() MsgBox Hensu End Sub と宣言すれば、使えますが、C#でそのような使い方はできないのでしょうか? 変数Hensu3をMainとMain2双方で使いたいとき、 using System; namespace ns1 { static class Program { public string Hensu3; static void Main(string[] args) { ・・・ } static void Main2() { ・・・ } } } と書きましたが、ビルドエラーになります。

専門家に質問してみよう