刺身タンポポ職人なう

文系女子大生がエンジニアとして就職してその後

Objective-Cの基礎

さいしょに

Objective-C初心者が勉強したことを適当にメモしていく。 参考書籍は下記↓

※メモ書きなので説明足りない所とか、間違っていることもあるかと思います

アシスタントエディタを使用してコードを書く

  • 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 NO
  • NSinteger の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
  • オブジェクトのプロパティ オブジェクトが持っている属性 -> viewのbackgroundとか、text-colorとか

  • オブジェクトのメソッド []メソッドを呼び出している

継承

  • NSObjectスーパークラスとしてそこから継承したクラスとして作られる
  • NSArray のほかに NSMutableArray も継承している
  • NSMutableArray -> NSArray -> NSObject
  • NSArrayNSDictionary は一度入れたら後から書き換えることができない。変更を加えたい場合は、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];

文字列の処理

数字を文字列にして結合する

  • stringWithFormatメソッドを使ってNSStringに入れる
  • stringWithFormatはコンビニエンスコンストラクタ! (message + 10 とかじゃ表現できないらしい)

文字列を比較する

  • isEqualToString

文字列を数値はBOOL値に変換する

  • [@"hogehoge" integerValue]

構造体

  • 構造体のメンバ参照とプロパティへのアクセスに使う . は全く別もの

headerファイル

  • headerはクラス宣言
  • 中括弧野中にインスタンス変数を定義することもできる
  • メソッドも宣言するとコード保管が効くから書いておく
  • propatyも書いておく

プロパティ変数(@propaty)

属性 意味
assign floatとかオブジェクトでないもの
strong 自分で作ったオブジェクト
weak ほかのところで作られたオブジェクト
copy 自分で作ったオブジェクトのコピー

実装ファイル

  • @Interface 拡張したいクラス名 -> クラスエクステンションという
  • @implementation は実際に宣言したものを記述

メソッド

メソッドのオーバーライド

  • スーパークラスになるメソッドをサブクラスで定義しないと使えないメソッドと、再定義する必要のないメソッドがある
    • この処理はリファレンスをみて確認する必要がある
    • 再定義の方法は [super viewDidLoad] という形でsuperクラスを呼び出す

自分のメソッドを呼び出す

  • [self メソッド名]

初期化

  • alloc, @propaty は宣言時に0になるよう初期化の処理が含まれている

その他メモ

  • appDelegate 最初の画面表示で呼ばれてくる関数
  • viewControllerはUIViewControllerを継承した自作のクラス名
  • integerValueとintValueの違いは64bitのときと32bitの時の処理の違い
  • * はオブジェクトの時のみつける
  • プロパティの呼び出しは _プロパティ名 or self.プロパティ名 で取得可能

リファレンスの見方

NSDate *now;
now = [NSDate date];

(インスタンスメソッドnowに対して使うことになる?)