引き続きofrubyを作っています。
ファイルを管理する必要が出てきたのでFCFileManagerというライブラリを入れたらEXC_BAD_ACCESS
エラーが出て半日位悩んだ。
検索しても分からずじまいで結局本屋に行って文献を漁ってやっと理解出来たのでメモ。
iOSのリファレンスカウントの仕組みは途中で変わっている
- iOSのオブジェクト(NSなんとか)のメモリはリファレンスカウントで管理される
- 昔は retain, release, autorelease とか使って自前で管理する必要があった
- iOS5からARC(Automatic Reference Counting)という自動でリファレンスカウントのコードをコンパイラが生成してくれる仕組みが入った(すごい)
- ARCでは retain, release, autorelease は書いてはいけない (コンパイルエラーになる)
そして次が重要。
- インターネットのサンプルコードはARC非対応、ARC対応のコードの両方が存在している
コピペする時に混ぜこぜにすると大変なことになるので注意。
openFrameworksのサンプルはARC非対応
ofrubyを作る時にopenFrameworksのサンプルコードから始めたのだけど、それはARC非対応だった(autoreleaseとか使って管理している)。
そこにARC対応だったFCFileManagerのコードをコピーしたのでさあ大変。リファレンスカウントが上手く動かずエラーになってしまった、ということだったようだ。後でREADMEを見返したらiOS >= 5.0
, ARC enabled
ってちゃんと書いてあるね・・。
対策としてはofrubyのコードをARC対応に書き換えることで上手く動くようになった。幸いまだコードも少なかったし、コンパイルスイッチやXcodeの設定で簡単に変更出来た。リファクタリングツールのサポートもあるようので今から書くコードは積極的にARCを使うようにしたい。
Appleが頑張っている点としてリンク単位ではARC対応、ARC非対応のコードが混在出来ることが挙げられる。今回も自分の書いたプロジェクトはARC対応に書き換えたが、openFrameworksのライブラリプロジェクトはARC非対応のままで上手く動かすことが出来た。
役に立った本
- 作者: 荻原剛志
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2011/12/28
- メディア: 大型本
- 購入: 14人 クリック: 98回
- この商品を含むブログ (22件) を見る
のCHAPTER 5にとても詳しく書いてあります。Swiftが使えるようになったとしてもCocoaのコアライブラリ自体はObjective-Cで書かれているので今から勉強してもそんなに損は無いと思っています。
- 作者: 所友太,京セラコミュニケーションシステム株式会社
- 出版社/メーカー: リックテレコム
- 発売日: 2010/01/12
- メディア: 単行本
- 購入: 25人 クリック: 329回
- この商品を含むブログ (42件) を見る
今回の本に関係ないけど何か作りたいならこっちの本もよい。インタフェースビルダーを使わない所とか素敵。
今日の成果
Objective-C 2.0 第3版 のおかげでバグも直り、ファイルの保存、保存したファイルの実行まで出来ました。