ページへ戻る

− Links

 印刷 

iOS​/Objective-C​/チートシート のバックアップの現在との差分(No.3) :: NJF Wiki

xpwiki:iOS/Objective-C/チートシート のバックアップの現在との差分(No.3)

« Prev[4]  Next »[5]
3: 2017-12-07 (木) 13:09:43 njf[6] ソース[7] バックアップ No.3 を復元して編集[8] 現: 2018-05-22 (火) 18:30:10 njf[6] ソース[9] 編集[10]
Line 1: Line 1:
*このページについて [#v6c0967b] *このページについて [#v6c0967b]
-普段、cocos2d-xやadobe airなど、クロスプラットフォームのフレームワークを使っているため、たまにObjective-Cを使う場面でなかなか文法などを思い出せないときがあります。そんなときのために、Objective-C固有の文法などをまとめていっています。+普段、クロスプラットフォームのフレームワークを使っているため、たまにObjective-Cを使う場面でなかなか文法などを思い出せないときがあります。そんなとき、ひとまず読める程度に思い出すために、Objective-C固有の文法などをまとめていっています。
Objective-Cは基本的な文法はC、C++、Javaなどと同じため、それらと異なる部分を抜き出して書いています。また、上記のように他言語を使うことが多く、Objective-Cでがっつり開発することはないため、各々の項目についての詳しい説明は省いています。 Objective-Cは基本的な文法はC、C++、Javaなどと同じため、それらと異なる部分を抜き出して書いています。また、上記のように他言語を使うことが多く、Objective-Cでがっつり開発することはないため、各々の項目についての詳しい説明は省いています。
Line 14: Line 14:
**ログ出力 [#lc67acc8] **ログ出力 [#lc67acc8]
-ログ出力はNSLogを使います。可変引数をとり、printfなどと同様のフォーマットが使えます。+ログ出力はNSLogを使います。可変引数をとり、printfなどと同様のフォーマットが使えます。ただし文字列型はたいていNSStringを使うので、%sではなく%@を使います。
 NSLog(@"Hello %d %d",10,20);  NSLog(@"Hello %d %d",10,20);
Line 31: Line 31:
 // プロトタイプ宣言など  // プロトタイプ宣言など
 @end  @end
-NSObjectは全てのクラスの元となるクラスなので、継承させるべき特定のクラスがないなら、これを継承させておくと便利です。+NSObjectは全てのクラスの元となるクラスなので、継承させるべき特定のクラスがないなら、とりあえずこれを継承させておくと便利です。
**インスタンス変数の定義 [#i9be9d10] **インスタンス変数の定義 [#i9be9d10]
Line 53: Line 53:
 @private  @private
 int _a, _b;  int _a, _b;
-という変数が定義され、setter、getterも定義されるので、ドット記法でプロパティにアクセスできるようになります。+という変数が自動で定義され、setter、getterも定義されるので、ドット記法でプロパティにアクセスできるようになります。
 instance.a = 1  instance.a = 1
Line 64: Line 64:
**メソッド定義 [#r746ad6d] **メソッド定義 [#r746ad6d]
 +「@interface」にプロトタイプ宣言、「@implementation」に実装を書きます。
 +
 + - (戻り値の型) メソッド名:(型名)引数:(型名)引数:.....
 +
 +先頭の「-」はインスタンスメソッドを表します。「+」だとクラスメソッドになります。
 +
 +例えば引数無しなら
 +
 + @implementation TestClass
 + - (int) getProduct{
 +     return _a * _b;
 + }
 +
 +引数にラベルを付けるには
 + - (戻り値の型) メソッド名:(型名)引数 ラベル:(型名)引数 ラベル:.....
 +とします。
 +
 +メソッドはprivateとかはないのですが、C言語などと同じでヘッダーファイルにプロトタイプ宣言を書くか、「.m」ファイルに書くかで関数の公開範囲を制限できます。つまり、ヘッダーファイルにプロトタイプ宣言を書かずに「.m」ファイルに
 +
 + @interface TestClass()
 +  - (void) privateMethod;
 + @end
 +
 +と書いておけば、privateメソッドと同じように使えます。クラス名の後に「()」を忘れないようにしてください。
 +
 +また、@propertyとかの前にメソッドを定義しようとするとエラーになります。
 +
 +**クラスを使う [#t8c2e54c]
 +クラスによって違う事もありますが、インスタンス化はたいてい以下のようにします。
 + TestClass *tc = [[TestClass alloc] init];
 +allocがメモリの確保、initがコンストラクタです。
 +
 +インスタンス変数へのアクセスはCの構造体やC++のインスタンスのように「->」でアクセスできます。
 + tc->a = 10;
 + tc->b = 20;
 +
 +プロパティ定義がなされていると、「.」(ドット)でもアクセスできます。
 +
 + tc.a = 12;
 + tc.b = 3;
 +
 +メソッドは
 + [インスタンス変数名 メソッド名:引数 ラベル:引数]
 +のように呼び出します。
 +例えば
 + [tc getProduct]
 + [tc getSum:10 : 12]
 +のようになります。
 +これはjavaなどで言えば、
 + tc.getProduct()
 + tc.getSum(10,12)
 +に対応する物です。
 +
 +**親クラスへのアクセス [#f50f661c]
 +superを使います。
 + [super メソッド名:変数とか]
 +
 +**自分のインスタンスへのアクセス [#l05a9438]
 +selfを使います。thisではありません
 + [self myMethod];
 +
 +*@なんとか [#e9fe4863]
 +
 +**@interface [#s3f25a59]
 +Cとかで言うところのプロトタイプ宣言とかにあたるもの。@endまでに変数と関数の定義を書く。
 +
 +**@implementation [#g86003d6]
 +@endまでに@interfaceで宣言したメソッドの処理を書く。
 +
 +**@autoreleasepool [#ef0c8648]
 +囲まれた範囲はメモリが自動で解放される。
 +
 +**@property [#qbc2f41a]
 +変数がスレッドセーフかとか、強い参照かどうかなどの属性と共にgetter,setterを自動で定義できる。
 +
 +**@synthesize [#g69b0ab1]
 +たいてい「@property」とセットで使い、getter,setterの定義の変更とかに使う。
 +
 +**@protocol [#p314526b]
 +他の言語でいうところのインターフェース。@optionalが実装しなくても良い物で、@requiredは必須。
« Prev[4]  Next »[5]