Objective-Cの基礎
さいしょに
Objective-C初心者が勉強したことを適当にメモしていく。 参考書籍は下記↓
詳細! Objective-C iPhoneアプリ開発 入門ノート Xcode5+iOS7対応
- 作者: 大重美幸
- 出版社/メーカー: ソーテック社
- 発売日: 2013/11/02
- メディア: 単行本
- この商品を含むブログ (2件) を見る
※メモ書きなので説明足りない所とか、間違っていることもあるかと思います
アシスタントエディタを使用してコードを書く
- control keyを押しながら
@interface ViewController
に接続したいGUI部品をドラッグ&ドロップする outlet
の意味は接続action
は動作を伴うときの接続で、1つのオブジェクトに対して複数のactionを設定してもいい- GUI部品とプログラムを接続したとき失敗したら(actionにしたかったのに、outletにしちゃったとかの場合とか、変数名変えたくなった場合とか)
- ソースコードの中身だけ削除しても起動エラーになる
- -> Storyboad -> view controller -> connections inspector -> コードで削除した所との接続を削除する
- IBActionとかIBOutletのキーワードを通してstoryboadとの連携が可能になっている(実際の返り値はvoid)
基礎文法
- viewController.mはstoryboadの画面制御を行う
- viewDidRoadはviewが読み込まれた後に処理されるコードを書く
#import
は二重取り込みを防止してくれる@
はobj-Cの機能拡張を表す機能(コンパイラディレクティブ)bool
の戻り値はYES or NONSinteger
のNSはnext stapの意味
浮動小数点
f
と書くことで小数点をfloat型として代入できる
ポインタ型の変数
- C言語的にはアドレス
*
を書く位置はどこでもいい。。
定数宣言
const
は定数宣言enum
は列挙型
enum { NUM_A = 10; NUM_B, NUM_C, NUM_D }; int sum = NUM_A + NUM_B + NUM_C + NUM_D; NSLog(@"%d" sum) -> 46
継承
NSObject
をスーパークラスとしてそこから継承したクラスとして作られるNSArray
のほかにNSMutableArray
も継承しているNSMutableArray -> NSArray -> NSObject
NSArray
やNSDictionary
は一度入れたら後から書き換えることができない。変更を加えたい場合は、NSMutableArray
として表現する- Mutableとついた変数がある場合は、ついてない変数が存在することが予測できる
クラスを利用する
メッセージ式(メソッドの呼び出し)
[オブジェクト メソッド名]; [オブジェクト メソッド名:引数]; [オブジェクト メソッド名:引数 ラベル名:引数2....]
クラスからインスタンスを作成して使う
(id)
はオブジェクトを表す特別な型
NSDate *theDate = [[NSdate alloc] init];
コンビニエンスコンストラクタ
インスタンスを作るには、ルートクラスNSObjectクラスのallocメソッドでインスタンスを生成してから、イニシャライザで初期化するのが普通だが、一連の手順を簡略化するコンビニエンスコンストラクタと呼ばれるメソッドが用意されている
プロパティの書式
- プロパティの定義
@property (weak, nonatomic) IBOutlet UITextField *myTextFild2;
- プロパティへのアクセス
_myTextFild1.text = @"今どんな気持ち?";
_オブジェクト名.プロパティ
で呼び出す
SetterとGetter
- Setter
[_myTextFild1 setPlaceholder:@"今どんな気持ち?"];
- Getter
NSString *placeHolder = [_myTextFild1 placeholder];
文字列の処理
数字を文字列にして結合する
文字列を比較する
isEqualToString
文字列を数値はBOOL値に変換する
- [@"hogehoge" integerValue]
構造体
- 構造体のメンバ参照とプロパティへのアクセスに使う
.
は全く別もの
headerファイル
プロパティ変数(@propaty)
属性 | 意味 |
---|---|
assign | floatとかオブジェクトでないもの |
strong | 自分で作ったオブジェクト |
weak | ほかのところで作られたオブジェクト |
copy | 自分で作ったオブジェクトのコピー |
実装ファイル
@Interface 拡張したいクラス名
-> クラスエクステンションという@implementation
は実際に宣言したものを記述
メソッド
メソッドのオーバーライド
- スーパークラスになるメソッドをサブクラスで定義しないと使えないメソッドと、再定義する必要のないメソッドがある
- この処理はリファレンスをみて確認する必要がある
- 再定義の方法は
[super viewDidLoad]
という形でsuperクラスを呼び出す
自分のメソッドを呼び出す
[self メソッド名]
初期化
alloc
,@propaty
は宣言時に0になるよう初期化の処理が含まれている
その他メモ
- appDelegate 最初の画面表示で呼ばれてくる関数
- viewControllerはUIViewControllerを継承した自作のクラス名
- integerValueとintValueの違いは64bitのときと32bitの時の処理の違い
*
はオブジェクトの時のみつける- プロパティの呼び出しは
_プロパティ名
orself.プロパティ名
で取得可能
リファレンスの見方
NSDate *now; now = [NSDate date];