ページへ戻る
+ Links
印刷
iOS/Objective-C/チートシート
の編集 ::
NJF Wiki
xpwiki
:
iOS
/
Objective-C
/
チートシート
の編集
iOS/Objective-C/チートシート の編集
詳細な入力項目を表示
ページタイトル
( 空白で自動設定 )
:
ページ並び順
( 0-9 小数可 標準:1 )
:
ページ別名
(複数は[
改行
]で区切る)
:
ページ内容:
*このページについて [#v6c0967b] 普段、クロスプラットフォームのフレームワークを使っているため、たまにObjective-Cを使う場面でなかなか文法などを思い出せないときがあります。そんなとき、ひとまず読める程度に思い出すために、Objective-C固有の文法などをまとめていっています。 Objective-Cは基本的な文法はC、C++、Javaなどと同じため、それらと異なる部分を抜き出して書いています。また、上記のように他言語を使うことが多く、Objective-Cでがっつり開発することはないため、各々の項目についての詳しい説明は省いています。 *基本 [#n4f274d4] **文字列 [#c7733e7a] 引用符と共に最初に「@」をつけるとNSStringという型になります。基本的に文字列はこれを使います。 NSString *s = @"これはテスト"; **ログ出力 [#lc67acc8] ログ出力はNSLogを使います。可変引数をとり、printfなどと同様のフォーマットが使えます。ただし文字列型はたいていNSStringを使うので、%sではなく%@を使います。 NSLog(@"Hello %d %d",10,20); 結果 Hello 10 20 *クラス関連 [#f9e052ac] **クラス定義 [#a5d1d8ae] クラス定義は「@interface クラス名:親クラス」とします。 @interface TestClass:NSObject{ // プロパティ定義など } // プロトタイプ宣言など @end NSObjectは全てのクラスの元となるクラスなので、継承させるべき特定のクラスがないなら、とりあえずこれを継承させておくと便利です。 **インスタンス変数の定義 [#i9be9d10] 「@interface」で囲まれている中で定義します。 @interface TestClass:NSObject{ @public int a; @private int b; } @end 「public」「protected」「private」などのアクセス制限が使えます。 **プロパティ定義 [#x794a50f] 「@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はオブジェクトのコピーをとって保持(参照渡しではなく、実体が渡される感じ)します。 **メソッド定義 [#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は必須。
編集の要約:
Q & A 認証:
ページ更新時は次の質問にお答えください。(プレビュー時は必要ありません)
Q:
「名古屋」の読みがな?(ひらがなで)
A:
お名前:
タイムスタンプを変更しない
テキスト整形のルールを表示する
添付ファイル
: