Cocoa勉強会の復習(続き)

  • initWithContentsOfURL:options :error

このインスタンスメソッドって初期化メソッド?alloc-initの組み合わせで呼ぶんでなかったの?

document = [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:NULL];

NSXMLDocumentクラスにある引数付きのインスタンス化メソッド。
initの他にも、それぞれのクラスが独自に提供しているインスタンス化メソッドがあると。init...というインスタンスメソッドがクラス毎に色々ある訳ですね。なるほど。

  • @""

@""ってなんじゃらほい?

nodes = [document nodesForXPath:@"/feed/title" error:NULL];

CやRuby等、他言語のダブルクォーテーション(")でくくって文字列作成するののObjective-Cのやり方。NSStringインスタンスの作り方の一番手軽なやり方。

おおう。Objective-Cにもnilがあった。実際には0の値だそうで。

//nil無し
if (document == 0) {
  ...
}
//nilあるからこう書けると
if (!document) {
  ...
}

勉強会時はあとはこれがわかればとかのたまったけど...

document = [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:NULL];
nodes = [document nodesForXPath:@"/feed/link" error:NULL];

これとかこれだよね?optionsとかerrorってラベルだよね。前者が引数3つ。後者が引数2つ。

  • データソース

テーブルビューのテーブルにデータを表示する為にはデータソースを使う。

  • 謎のメソッド2つ

実装時に記述したけど、どこにも呼び出しを書かなかったインスタンスメソッド2つ

- (int)numberOfRowsInTableView:(NSTableView*)tableView
{
  ...
}
- (id)tableView:(NSTableView*)tableView
objectValueForTableColumn:(NSTableColumn*)tableColumn row:(int)row
{
  ...
}

データソースが必ず実装しなくてはいけない必須のメソッド。
前者がテーブルの行数を返すメソッド。
後者が指定された行、列にあたるデータの値を返すメソッド。
呼び出された時に自動で処理される。JavaJavaScriptでいえばaddEventlistenerみたいな?

  • 配列

オブジェクトの配列が作れる。

  • ネームスペースの管理

Objective-Cにはネームスペースの機能はない。パッケージとかない。
アプリやフレームワークを設計する場合、クラスの頭に2文字から4文字程度の共通の頭文字を付ける。おおらか。
ex.NSString,NSArray,NSDictionary

プロジェクトでGCを有効にするとガベコレが自動で処理してくれる。楽チーン。
オフの時は当然自前で管理。iPhoneなんかはObjective-C2.0だけどGCは使えないそうなので自分で管理と。

  • 雑感

メソッドの呼び出しが、[]使ってたり(ex.返り値=[インスタンスorクラス名 メソッド名];)、インスタンスメソッドが-からとかクラスメソッドが+から等、最初はかなりキモイ感じがした。特に引数が複数ある場合のラベルとか。
けど、書いてるうちに段々慣れてきた。
むしろ、変数や制御文はそのままC言語のものを使用、オブジェクト指向に関するものだけ追加というこのスタンスは、言語仕様としてはかなりシンプルで個人的には好感触。後はコード見まくって定石がつかめれば。
とりあえず、勉強を進めていくのに最低限必要な知識は出来た感じ。勉強会サイコー!