headerAd

2014年10月28日火曜日

1年経過

今日でmac miniを購入してObjective-Cを勉強し始めて1年になる。
完成したアプリはまだ2本しかないが、色々挑戦してみようと思う。

来年の今頃には7~8本目くらいが出来上がっているといいなあ。
(現在開発中のもう一本のものはとりあえずレイアウトを考えている途中で、ある程度出来上がっている。)

2014年10月10日金曜日

iOS8 いいね!

というわけで、何がいいか?というと、メモリ管理が優秀になっています。こちらで気を付けないといけないだろ?っていう突込みは無しの方向で。

写真を撮影すると即クラッシュすることがあるバグ。これの原因は、メモリ管理の失敗によるものです。頑張って可能な限り消費メモリを抑えるように努力してきましたが限界があるようで、5枚撮影するとクラッシュしてしまうところを10枚にする程度のことしかできませんでした。これは撮影した際にメモリリーク(メモリのゴミ)が生じるためで、個人で作成したものであればある程度の対策はできるのですが、フレームワークやSDK(プログラムを構成する構築済みの材料みたいなもの)として提供されているものの場合には、こちらから手を出すことができない場合がほとんどです。つまり、今までは自前の部分をがんばって最適化していたわけですね。

どのOSに対しても言えることですが、昔と比べて最近のものはメモリの扱い方が上手になっています。使えるメモリは有限ですから、上手に扱わないとあっという間に空になってしまいます。そのための手続きがiOS7と比較してかなり上手になっているなと感じたわけです。
相変わらずLサイズ撮影に変更した際には警告文が出ますが、iOS8の環境で使用される場合にはLサイズ撮影も問題なく行うことができます。ためしに撮影したところ、20枚程度ではクラッシュする気配を感じられません。OSの性能に最初からいろいろ任せてしまうのはプログラマとして最悪ですが、できる限りのことをしてあとは天(OS)に任せる。これくらいのことはしてもいいんじゃないかなと思っています。

2014年10月5日日曜日

Colorエフェクトとか

基本的にトーンカーブを使う。
動的色域(ナイトビジョン)とかは、その名の通り周りの明るさからトーンカーブを導出する。

その他のエフェクトは、RGBを直接いじるエフェクトとかツールを使ってカーブを指定してやったりする。
GPUImageは簡単にトーンカーブを読み取ることができるので、便利である。以下の通り、

GPUImageToneCurveFilter *toneCurve = [[GPUImageToneCurveFilter alloc] initWithACV:@"hoge"];

ね、簡単でしょ?

ナイトビジョンの方は、明るすぎず暗すぎずを動的に導出する式を作るのが大変だったけどね。白飛び防止は暗視系の重要ファクターね。0.5秒おきにトーンカーブを変更するので瞬間的な明るさの変化には弱いんだけどね。
あと、露光ターゲットと同期させたりするのも、割と面倒だった。

このナイトビジョンの明るさ調節に用いられる値を導出したことによる副産物が静音時におけるフラッシュ。静音の設定にすると、簡単に言ってしまうとiOSの仕様上、非静音時と同じようにフラッシュを使うことができないんだ。ほかの人がどうやっているかはわからないけど、フラッシュ設定時にはトーチをつけっぱなしにする人もいるね。