最近の変更サイトマップ

Garbage collection

不要になった動的確保したメモリ空間を、システムが自動的に開放してくれる仕組み garbage collection。カタカナ表記だと「ガベージコレクション」となるが、英語の発音的には「ガーベッジコレクション」と表記するのが、正しいのではないかと思うのだけれど……。その辺、どうなってるんだろう。

そんな時はGoogle先生にお任せ!ということで、各単語での検索結果を調べてみた。

単語 件数
ガベージコレクション 23600
ガーベジコレクション 9310
ガーベッジコレクション 9470
ガービジコレクション 1
ガービッジコレクション 27

なかなか興味深い結果になった。

ガベージが一番多いのは当然として、ちょっとだけ原音に近いガーベジガーベッジ連合が<em>ガーベジ</em>勢力と、拮抗している点は面白い。一番原音に近いと思われるガービッジの結果は、同じような疑問を持った人々の、掲示板でのやりとりだった。……やっぱり疑問に思う人っているのね。

ググってみて、気になった点。

  • 用語解説系サイトではガベージガーベジが併記されているところが多いが、どっちかと言えばガベージをメインに据えている(ガーベジガベージの解説ページにリダイレクトされることが多い)。
  • でも、e-Wordsだけは、あくまでもガーベジ派の模様(ガベージがリダイレクトされる)。大好きだよe-Words。

なんか、うまい日本語訳無いものかねぇ。

NSArrayとNSTableViewとNSArchiverを学ぶ

どのクラスも、まぁ、その名前の通り。NSArrayは配列を、NSTableViewはテーブルビュー(Winで言う所の、エクスプローラで表示方法を「詳細」にした時に表示されるような形式)を、そしてNSArchiveはデータの保存に関するクラスである。

Windowsに関するプログラミング技法は全然知らないので比較はできないが、とにかくどのクラスも便利過ぎる。「この値を格納しろやー」「このデータを『商品名』フィールドに表示してくれやー」というメッセージを、それぞれのインスタンスに送るだけで、きっちりと期待通りの動作をしてくれる。

何より凄いのが、NSArchive。各オブジェクトに -encodeWithCoder: プロトコルを実装してやれば、保存したいオブジェクトに含まれる、別のオブジェクトまでを全て一発で保存してくれる。そうやって保存したデータの読込みは、NSUnarchiver クラスで一発OK。面倒な保存/読込み処理を、これらのクラスに丸投げできて、非常に便利便利。

前回のNSSoundとあわせて、簡易サウンドプレーヤを作る為の材料は、これで揃った。あとは実際に製作に取りかかるのみだ。頑張るぞー!!

メソッドのポインタ

Objective-Cのメソッドのポインタを取得して、メソッドをCの関数として呼び出す事が出来るのだとか。

// イニシャライズ
id obj = [Hogehoge new] ;
// メソッドのセレクタ取得
SEL method = @selector(methodOfHogehoge);
// セレクタからメソッドのポインタ取得
IMP func = [Hogehoge instanceMethodFor:method];<br />
// 関数としてメソッド methodOfHogehoge を実行
func(obj, method);

肝となるのは、instanceMethodFor: メソッド。こいつがセレクタ(メソッドの内部識別子)から、メソッドのポインタを探し出してくれる。その返り値を、IMP型で受け取るとあら不思議、Cの関数呼び出しの形でObjective-Cのメソッドが実行できちゃった。ただし、引数として元のメソッドが含まれるオブジェクトのインスタンスと、メソッドのセレクタを渡してやらないといけない。

とりあえずObjective-Cの勉強は一段落したが、俯瞰してみるとObjective-Cが「Cの枠組みの中でオブジェクト指向を目指した言語」であるということがよくわかる。そのお陰かCの流れを汲んだオブジェクト指向言語であるC++と比べて、言語規模は格段に小さい(と思う)。

表記方法がかなり特殊ではあるが、初心者がオブジェクト指向を学ぶには、Objective-Cは結構いい言語なのでは?と思ったりした。

iPod nano発売!

かねてより噂されていた、新型iPodが発表&発売された。その名も「iPod nano」。2GB/4GBのフラッシュメモリとカラー液晶を搭載し、従来のiPod mini枠の置き換えを計った、超小型のiPodだ。

その大きさたるや、90x40x6.9(mm)!! 手持ちの3G iPod(20GB)の実寸が100x60x15(mm)なので、面積的には一回り、厚さ的には1/2近く小さい。

「iPodは持ってるけど、シリコンオーディオプレーヤが欲しい。でもshuffleじゃ容量的にも操作性的にも厳しいし……」と思っていた人(俺)には、まさに最適解となる製品である。いやー、appleはわかっていらっしゃるw

ただ、首からぶら下げての使用を想定してか、ヘッドフォンジャックが本体下部、Dockコネクタの脇に付いているのは戴けない。胸ポケに入れて使用する場合は、どうするのであろうか。使用するヘッドフォンのコネクタがL字型であれば、さほど問題にもならないだろうが、垂直タイプ(従来のiPodに付属のイヤホンもこのタイプ)だと、上下逆さまにしないと使えないと思うのだが……。数日もすれば、その辺の使い勝手も、次第に明らかになっていくとは思うが。

個人的にはiPod Camera Connectorが使えるのかも気になる。これが使えれば、iPod nanoを広大なカメラストレージとして使うことができるから。

iTunes5も本日付けで公開された。見た目のデザインがTiger風味に変更され、検索機能がより強化されたのが特徴。

20050908-01.jpg

で、この新検索を使ってみて気づいたのが「ビデオ」という、絞り条件があるということ。

さらっと試してみた所、MPEG-1とPSP向けに作ったMP4ファイルが普通に取り込めた━(゚∀゚)━! 。残念ながら試した限りではAVIは取り込めなかったが、もしかしたらWindows版では取り込めるのかも。もちろん、取り込んだ動画は、他の曲と同じように扱える。

こうして、わざわざビデオ機能を包含するということは、iPodがビデオ再生機能を取り込む日も近い!?

他にも、AACがVBRに対応したり、曲ごとに「再生位置を記憶」できたり、歌詞に対応したりと、地味だけど何気に機能が底上げされている。

128kbpsのVBR-AACとCBR-AACで比較してみたところ、スペクトラム的には高域が出ているようだ(聴き比べはしてないので、音質に関しては不明)。ファイルサイズも、若干ではあるがVBRの方が抑えられている。VBRというよりは、ABRに近い感じだ。

「再生位置を記憶」は、従来はファイルの拡張子を、m4aからm4bに変える事で裏技的に利用できた機能であったと思う。普通の曲では使いどころが難しいと思うが、まぁ、それは人次第だろう。

何はともあれ、ここの所のappleは、とかく絶好調ですな。iPod nano、凄く欲しいぞ。

イニシャライザの返り値

サンプルソースを見ていると、各クラスのイニシャライザは

return self;

obj = [super init]
...
return obj;

というコードで、自身を返している。うーん何でだろう?

わが師匠し~くる氏に聞いてみたところ、

[hogeHoge alloc];
[hogeHoge init]

[[hogeHoge alloc] init]

と短縮して書ける。そして「親クラスのイニシャライズが成功したか否かの判別に使う」とのこと。

ふーむ、最初の用途は簡単に理解できる。[hogeHoge alloc] が自身(self)を返すから、[[hogeHoge init] alloc] = [self init] = [hogeHoge init] ということが言える。

でも、親クラスのイニシャライズの判別は、ちょっとわからない。なぜ、self にスーパークラスの返り値を入れることで、判別できるのだろう……?そもそも、親クラスのイニシャライズの成否を調べる場面が、今は思い浮かばない。

まぁ、ボチボチ調べていくことしますか。

(2013-04-10 追記)
今読み返してみると、内容が完全に「日本語でおk」な件。当時の俺は何を考えていたんだろう…。

start.txt · 最終更新: 2016-05-07 17:46 by decomo
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0