2011年5月3日火曜日

initWriteContentsOfURL:

initWriteContentsOfURL: - Deprecated in iOS 2.0.

Deprecatedの訳
非推奨みたいな意味だろうと思っていたが、辞書的にしっくりこないのでググる。と、こちらに「廃止予定」という訳が載っていた。非推奨でもいいような気がするが、廃止になったら非推奨じゃ済まなくなるからね。

代替メソッド
initWithContentsOfURL:encoding:error:
initWithContentsOfURL:usedEncoding:error:

両者の違いはencodingが入力であり、呼ぶ側が指定することになる。usedEncodingは取り込んだデータのencodingをセットして返してくれる。らしい。

encoding / usedEncoding
NSStringEncodingなんだが、リファレンスで検索しても出てこない。そこでXcodeで入力し、Jump to Defineすると、unsigned int の typedefじゃないか。で、すぐ上にenumがずらっと並んでいる。まてよ、

enum { NSASCIIStringEncoding = 1, /* 0..127 only */
NSNEXTSTEPStringEncoding = 2,
.
.
};

と書いてある。何か変だなあと思うとタグがない。いいんだっけ? ま、書いてあるんだから良いんでしょうきっと。
でも、initWithContentsOfURL:encoding:error: を使う場合、encodingに何を指定したらいいのか。コンテンツとURLのエンコーディングが違う場合は、こちらを使って明示しなければならないのではないか? とすると、こちらを使う方が、initWithContentsOfURL:usedEncoding:error:より確実なのか? いや、ケースバイケースな気がする。とりあえずinitWithContentsOfURL:usedEncoding:error:で良いものはencodingを指定しなくて良いので、こちらのほうが、古いinitWriteContentsOfURLに近いと思えば良いだろう。

NSError
NSError Class Reference
の中で、
An NSError object encapsulates richer and more extensible error information than is possible using only an error code or error string.
とあるが、この than is が分からないのでググると、
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1335271008
が出てきた。何でも出て来るなあ本当に。みんな、すごいすごい。
ということは、information than information is なのかな。
バカちょんなエラー情報(エラーコードやエラーメッセージ)よりricher で more extensibleだと。

で、こちらのブログに日本語で書かれたものがあって大助かり。ありがとうございます。メソッド名に対応して<a>タグにid=initWithContentsOfURLusedEncodingerrorのような格好でメソッド名(:は無し)が付いているので、リンクが近くて良い。すばらしい。

"Upon return, if url is read successfully, contains the encoding used to interpret the data."

という意味が、used toで引っかかってしまい、何となくurlの内容のencodingがセットされるという意味じゃないかと思うのだが、確信が持てない。で、先の日本語訳でやはり大体そういうような意味だったので納得できた。

「used to --(昔は)よく〜した(ものだった) 」じゃあ、ねぇ。

Objective-Cのコロン
initWriteContentsOfURLではなく、initWriteContentsOfURL:
コロンは最初のパラメータ。コロンがないということはパラメータがないということ。で、偶然か慣習か、コロンの直前の単語がパラメータを示す単語になっている(している)みたい。initWriteContentsOfURL:だとURLが第一パラメータ。2つ以上あっても同じで、initWithContentsOfURL:encoding:error: なら、URL、encoding、errorがそれぞれパラメータになっている。だが、これだけ見ても型が分からないので、中途半端な感じが否めない。でも、もしかしたらそれは、単に馴れてないからその効果が分からないというだけかもしれない。cやc++は関数名的な部分の名前しか分からないわけだから。まあ、早く大きな声で言えるよう、馴れることだ。

0 件のコメント:

コメントを投稿