3: 2017-12-07 (木) 13:09:43 njf[6] [7] [8] | 4: 2017-12-08 (金) 09:12:12 njf[6] [9] [10] | ||
---|---|---|---|
Line 1: | Line 1: | ||
*このページについて [#v6c0967b] | *このページについて [#v6c0967b] | ||
- | 普段、cocos2d-xやadobe airなど、クロスプラットフォームのフレームワークを使っているため、たまにObjective-Cを使う場面でなかなか文法などを思い出せないときがあります。そんなときのために、Objective-C固有の文法などをまとめていっています。 | + | 普段、cocos2d-xやadobe airなど、クロスプラットフォームのフレームワークを使っているため、たまに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; | ||
+ | } | ||
+ | |||
+ | 引数にラベルを付けるには | ||
+ | - (戻り値の型) メソッド名:(型名)引数 ラベル:(型名)引数 ラベル:..... | ||
+ | とします。 | ||
+ | |||
+ | **クラスを使う [#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 メソッド名:変数とか] | ||
+ | |||
+ | *@なんとか [#e9fe4863] | ||
+ | |||
+ | **@interface [#s3f25a59] | ||
+ | Cとかで言うところのプロトタイプ宣言にあたるもの。@endまでに変数と関数の定義を書く。 | ||
+ | |||
+ | **@implementation [#g86003d6] | ||
+ | @endまでに@interfaceで宣言したメソッドの処理を書く。 | ||
+ | |||
+ | **@autoreleasepool [#ef0c8648] | ||
+ | 囲まれた範囲はメモリがかってに解放される。 | ||
+ | |||
+ | **@property [#qbc2f41a] | ||
+ | 変数がスレッドセーフかとか、強い参照かどうかなどの属性と共にgetter,setterを自動で定義できる。 | ||
+ | |||
+ | **@synthesize [#g69b0ab1] | ||
+ | たいてい「@property」とセットで使い、getter,setterの定義の変更とかに使う。 | ||
+ | |||
+ | **@protocol [#p314526b] | ||
+ | 他の言語でいうところのインターフェース。@optionalが実装しなくても良い物で、@requiredは必須。 |
(This host) = https://njf.jp