部屋とObjective-Cと私

PCがたくさん動いてる部屋は暑いよ〜;;

昔話をするにはまだ早い。勢い余ってObjective-Cカテゴリをつけたことを早くも後悔し始めている。だが!それでも!


特にこれといった話でもないが、なんとなく、Objective-Cとの付き合いを振り返ってみる。私はそれほど古参というわけでもないが、むしろ新参だが、それでももう2年だか3年になるのか。思えば、XcodeObjective-Cの使い方もずいぶんと変わったものだ。

私が最初にObjective-Cを学び始めた頃は、まだストーリーボードというものが存在しなかった。代わりに、Xcodeとは別に、Interface Builderなるツールが存在した。画面は.nibファイルとして構築し、初期化はawakeFromNibでやるもんだった。

というか、私の場合、最初の頃はIBを使わずに、すべての画面部品をソースコード上で作り上げようとしていたので、IBにしろストーリーボードにしろ、なかなか馴染めなかったのだ。

特に、画面遷移時に、ViewController間で、どうやってデータの受け渡しをしようか頭を悩ませていた覚えがある。今では、performSegueとprepareForSegueを使えばいいって、はっきりわかんだね。


それの前だったか後だったか、Xcodeに乗っかっているコンパイラが、GCCからLLVM(Clang)に変わった。それまでCコンパイラといえばVCだった私にとっては、どちらもひどくまっとうなコンパイラであったが。最新のC++をサポートするコンパイラで開発ができるというのは、やはり心が躍った。

最初の頃はスレッドには手を出さずにいたので、GCDは気づいたらあった。だが、それでも最初の頃は、NSThreadやdetachNewThreadSelectorなどを少しは使っていた。その後、dispatch_afterやNSOperationQueueとブロック構文を使う方が主流になっていった。


一番大きく変わったのは、メモリ管理だろう。ARCが登場したとき、私は、「そんなもん必要ない」と思っていた。どうせ中で同じことをやっているのを隠すことに意味なんてないし、retain, copy, release, autoreleaseなどを間違えない、忘れない自信があったのだ。もし解放し忘れがあっても、静的構造解析を使えば発見できるし。

しかし時代は変わり、主流も変わり、自然とそれに慣れるもんだ。Xcode 5.0からは、ARCがデフォルトで有効になるようになった。今ではinitと同時にautoreleaseするだとか、dealloc内でreleaseするのなんて面倒臭くてやってられない。

propertyも前はsynthesizeが必要だったのが、いつの間にか勝手にやってくれるようになっていた。今ではsynthesizeなんて面倒臭くて(ry


そういや、昔は、「いずれiOSにもGCが実装されるんだろうな〜」とか勝手に思い込んでいたが、今じゃOS XですらGCはdeprecatedである。もちろんSwiftもARCベース。少なくともApple内ではARCがGCに勝ったということになるのだろう。


そしていよいよ画面側は、Autolayoutが主流になってきた。



と、ここまでが、およそこの2, 3年の間に起きたことである。

さて、今私の状況がどうなっているかというと、ARCを使うアプリと、ARCを使わないアプリと、全体的にARCを使うが一部は-fno-objc-arcでコンパイルするアプリを担当している。

画面レイアウトについても、Autolayoutを使っているアプリとそうでないアプリ、一部だけ使っているアプリがある。

なかなか愉快なもんだ。

この状況はまだしばらく続くだろう。

そして今後は、その上さらに、Swiftが混ざってくるのだろう。

ARCありなし混在のアプリの一部にSwiftが混ざってきて、その中で使う一部の機能をCで作ってJNIでAndroidと共有するなんてことになることを想像すると胸が熱くなるな・・・