[Objective-C]CGImageRefで強制終了した話


Swiftが流行る中でObjective-Cの記事かよというツッコミはあると思いますが、多分、Swiftでも起こる話なので見ていってください。

CGImageRefって何?という方は下の記事が結構細かく書かれているので読んでください。

http://galakutaapp.blogspot.com/2016/08/blog-post_25.html

コードを組んでいる最中にXcodeでdebugビルドしたところ問題なく、releaseビルド時のみ強制終了したところから始まります。
始め、どこで強制終了しているか不明で調査するしたところ、どうやら以下のコードで強制終了しているようでした。

// imgのcgImageRefはライブラリで定義されていたもの
CGImageRef imageRef = [img cgImageRef];
UIImage *image = [UIImage imageWithCGImage:imageRef];

解決方法は簡単で一度定義されているCGImageRefを直接入れればいいということでした。

// imgのcgImageRefはライブラリで定義されていたもの
UIImage *image = [UIImage imageWithCGImage:[img cgImageRef]];

直前で定義したものが次の行で解放されていることに驚きを隠せませんでした。

因みにStackOverflowの英語記事にあったような気がしますが、見つけにくかったのでメモ書き程度にこちらで記載しました。