新・画像を生成する関数

いつぞや、画像を生成する関数として次のようなコードを書いたのですが、

お恥ずかしながら間違っておりまして、どこが間違っているかというと

dataはmallocで動的に確保したメモリなので、解放しなきゃだめなんですが、これreturnで返しているUIImageオブジェクトの実体になるのでfreeで解放したら駄目です。せっかく作った画像を使わず解放することになってしまいます。
じゃあ、どこで解放するんだよとなるのですが、解放するための関数を用意する必要があります。CGDataProviderCreateWithData() の第4引数に解放時のコールバックを指定できるので、ここで解放する感じ。これを踏まえて正しい画像を生成する処理を書いてみます。

これでメモリリークを心配せずに処理をぶん回せるはずです!間違っててすいませんでした!

2012/11/05ソースコード訂正しました


“新・画像を生成する関数” への3件の返信

  1. png画像を繋げる処理を行いたかったのでとても参考になりました。
    ありがとうございます。

    ところで、ARCを使ってるためか「bufferFree」のメソッドでfree時に以下の警告が表示されるのですが気にしなくても良いのでしょうか?
    「Passing 'const void *' to parameter of type 'void *' discards qualifiers」

  2. >ジョウさん
    static void bufferFree(void *info,const void *data, size_t size)
    {
    free((unsigned char *)data);
    }
    確かに警告が出ていましたね:(;゛゜'ω゜'):
    このようにしてください。
    指摘ありがとうございました。

コメントを残す