"dealloc"でエラー。

先日から作成していたサンプルソースで、画像処理部のコードを追加したところ、
追加したdealloc関数でエラーが発生(正しくは関数内の[super dealloc];)、下記メッセージが表示された。
  ARC forbids explicit message send of 'dealloc'

他にも、release、retainでもエラーマークあり。
手持ちの参考書で調べてみると、Xcode4.2からサポートされたARC(Automatic Referrence Counter)に関係している様子。

エラーメッセージをそのまま検索したら、F's Footprint様 2012/03/06にて解説されているのを発見。
ARC forbids explicit message send of 'release' | F's Footprint


手持ちの本と合わせると「ARCはメモリ管理をかしこく行ってくれる」機能。
ARCを使う事で自動管理されるが、これにより使用禁止になるのがretain/release/autorelease/dealloc。

対策としては、

  • retain/release/autorelease/deallocを使わないように修正する。
  • ARC機能を使わない、またはOffにする。

今回は一時的にARC機能をoffにすることで対応した。

  1. ProjectNavigater でプロジェクト名を選択し、Build Setting > Apple LLVM compiler3.1 - Language > Objective-C Automatic Referrence Countingを表示。
  2. Yes/No項目が4つあるので、2つ目/3つ目を No に変更する。

リビルドしてエラーが無い事を確認して、一安心。
後でARC-On時のコードも作成しよう。