Ad

このページについて anchor.png Edit

普段、クロスプラットフォームのフレームワークを使っているため、たまにObjective-Cを使う場面でなかなか文法などを思い出せないときがあります。そんなとき、ひとまず読める程度に思い出すために、Objective-C固有の文法などをまとめていっています。

Objective-Cは基本的な文法はC、C++、Javaなどと同じため、それらと異なる部分を抜き出して書いています。また、上記のように他言語を使うことが多く、Objective-Cでがっつり開発することはないため、各々の項目についての詳しい説明は省いています。

Page Top

基本 anchor.png Edit

Page Top

文字列 anchor.png Edit

引用符と共に最初に「@」をつけるとNSStringという型になります。基本的に文字列はこれを使います。

NSString *s = @"これはテスト";
Page Top

ログ出力 anchor.png Edit

ログ出力はNSLogを使います。可変引数をとり、printfなどと同様のフォーマットが使えます。ただし文字列型はたいていNSStringを使うので、%sではなく%@を使います。

NSLog(@"Hello %d %d",10,20);

結果

Hello 10 20
Page Top

クラス関連 anchor.png Edit

Page Top

クラス定義 anchor.png Edit

クラス定義は「@interface クラス名:親クラス」とします。

@interface TestClass:NSObject{
 // プロパティ定義など
}
// プロトタイプ宣言など
@end

NSObjectは全てのクラスの元となるクラスなので、継承させるべき特定のクラスがないなら、とりあえずこれを継承させておくと便利です。

Page Top

インスタンス変数の定義 anchor.png Edit

「@interface」で囲まれている中で定義します。

@interface TestClass:NSObject{
@public
   int a;
@private
   int b;
}
@end

「public」「protected」「private」などのアクセス制限が使えます。

Page Top

プロパティ定義 anchor.png Edit

「@property」を使うと、先頭に「_」(アンダーバー)がついたプライベート変数が定義され、同時にsetter、getterも定義されます。

@property int a,b;

とすると、

@private
int _a, _b;

という変数が自動で定義され、setter、getterも定義されるので、ドット記法でプロパティにアクセスできるようになります。

instance.a = 1
instance.b = instance.a

といった記法が可能になります。 「@property」で「readonly」を指定して読み取り専用変数にしたりも出来ます。 また、よく使われる「atomic/nonatimic」はスレッドセーフかどうかの違いです。 他にstrongは強い参照(参照が他で消されてもデータを保持)、copyはオブジェクトのコピーをとって保持(参照渡しではなく、実体が渡される感じ)します。

Page Top

メソッド定義 anchor.png Edit

「@interface」にプロトタイプ宣言、「@implementation」に実装を書きます。

- (戻り値の型) メソッド名:(型名)引数:(型名)引数:.....

先頭の「-」はインスタンスメソッドを表します。「+」だとクラスメソッドになります。

例えば引数無しなら

@implementation TestClass
- (int) getProduct{
    return _a * _b;
}

引数にラベルを付けるには

- (戻り値の型) メソッド名:(型名)引数 ラベル:(型名)引数 ラベル:.....

とします。

メソッドはprivateとかはないのですが、C言語などと同じでヘッダーファイルにプロトタイプ宣言を書くか、「.m」ファイルに書くかで関数の公開範囲を制限できます。つまり、ヘッダーファイルにプロトタイプ宣言を書かずに「.m」ファイルに

@interface TestClass()
 - (void) privateMethod;
@end

と書いておけば、privateメソッドと同じように使えます。クラス名の後に「()」を忘れないようにしてください。

また、@propertyとかの前にメソッドを定義しようとするとエラーになります。

Page Top

クラスを使う anchor.png Edit

クラスによって違う事もありますが、インスタンス化はたいてい以下のようにします。

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)

に対応する物です。

Page Top

親クラスへのアクセス anchor.png Edit

superを使います。

[super メソッド名:変数とか]
Page Top

自分のインスタンスへのアクセス anchor.png Edit

selfを使います。thisではありません

[self myMethod];
Page Top

@なんとか anchor.png Edit

Page Top

@interface anchor.png Edit

Cとかで言うところのプロトタイプ宣言とかにあたるもの。@endまでに変数と関数の定義を書く。

Page Top

@implementation anchor.png Edit

@endまでに@interfaceで宣言したメソッドの処理を書く。

Page Top

@autoreleasepool anchor.png Edit

囲まれた範囲はメモリが自動で解放される。

Page Top

@property anchor.png Edit

変数がスレッドセーフかとか、強い参照かどうかなどの属性と共にgetter,setterを自動で定義できる。

Page Top

@synthesize anchor.png Edit

たいてい「@property」とセットで使い、getter,setterの定義の変更とかに使う。

Page Top

@protocol anchor.png Edit

他の言語でいうところのインターフェース。@optionalが実装しなくても良い物で、@requiredは必須。


Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 988, today: 1, yesterday: 0
Princeps date: 2017-12-07 (Thu) 05:44:26
Last-modified: 2018-05-22 (Tue) 18:30:10 (JST) (393d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF