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は必須。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 380, today: 1, yesterday: 0
初版日時: 2017-12-07 (木) 05:44:26
最終更新: 2018-05-22 (火) 18:30:10 (JST) (56d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF