- メモリの管理についてお勉強
- allocで領域確保(オーバーライドしない)
- initで初期化(オーバーライドして使う)
- 同一オブジェクトを参照するときはretain(オーバーライドしない)
- コピーするときはcopy(オーバーライドしない、copyWithZoneをオーバーライドするべき)
- 解放するときはrelease(オーバーライドしない)
- 実際にメモリから削除されるのはdealloc(オーバーライドして使う)
- NSAutoReleasePoolとautoreleaseメソッド・・・事前にautoreleaseしておいたオブジェクトは[NSAutoReleasePool releaseまたはdrain]呼び出し時に一斉に解放される
1日に二日分前進。iPhone発売から既に4ヶ月経過、既に無数の超優良アプリがわんさかと出回っています。果たして私は遅れを取り戻せるでしょうか。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6vqBWDhLxb3m1wlDXtGU34zUsLGIhLIqZzkOBaqne79ZfHIaXq8pJR1M-Ye8kOOEr23M_IvpY1gfobBRPQ0nGRnNN-TmZZfEEXvK5AeqWgNh725qN02LguaRSuta58djiA_qpuSsy0Nw/s280/Assignment1B_01.png)
これはNSURLから文字列を取得する方法を模索していたときです。
結局、absoluteStringかrelativeStringが正解ということがわかりました。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_AB_Ajgo6riKK3aVzLQWyszc8ElICAuCIQ7_Kxs17gbLlAd73vElsCRRBP2KJSELkyytpGqTZeYfUgIQ6GyLhGrfK8NIN-xlbxpO7VINMQMOhMVUp6QJqGp57wXOKLR5z8g15bkH7j0g/s280/Assignment2A_01.png)
クラスの作成とメモリ管理。ようやくCらしくなってきたかな?
Objective-Cではガベージコレクションもできるらしいのですが、iPhone開発ではガベージコレクタをぶん回せるだけのリソースはないため昔ながらのメモリ管理でやる必要があります。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiAtodYbX2ZBF6nZwEvVpNdyFb8hA5c-Dq3qxUPMiBRhBSlGWhTG3-GFJdRbpFGEsWQsJc85jsCf9lV2Hcq2JljsClH2wjZgqMDl8YU6YatuLAL7ZbvwisboVE5BEKA69Ji6XWjTK3Y9o/s280/Assignment2A_02.png)
いろんなイニシャライザをためしてみました。
リストにオブジェクトを突っ込んだときは、突っ込んでいるNSArray自身もリリースしないと、個々のオブジェクトがリリースされません。おそらく内部でretainされてるんでしょうね。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRA2O356ppI9UyiC81_45T-QTauMJblh29hKQqteKz5FbU-xk8Xbn_J2pR1othWz_3FfQ3BRZzbmi43icjL8VCRmrRfCHhMD196-HdjAxXLHFqlAs0dGwzkIrmcwkFoZ1oJPSrtJcnpHI/s280/Assignment2A_03.png)
introspection(Javaでいうところのrefrection)にチャレンジ。instanceof演算子みたいなのはなくて、すべてNSObjectのメソッドとして提供されています。java.lang.refrectionパッケージみたいな面倒さはないです。あとセレクタはSEL型とかいう専用の型があって便利。いわゆる関数へのポインタとして使えます。Javaの何が不満ってこの関数ポインタがないところですよ。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqDzariCWDSLR5uKEeMXzY4z5TjKrIK-8Je7vkmj6vf1NjL4CSwWWjEHrK1krPEnArOqm4EOk5JjnCs4p-2X01qc76LIaaAEsnupZby15rA9OU6mG7sKnYGeXhwfsfKLpG11Jk5xSb4Og/s280/Assignment2B_01.png)
続けてもう一つの宿題のほう(Assignment2B)に突入。いよいよ実際に動作するiPhoneアプリを作ることになるのですが、その前に一つ宿題にバグ?があったのでご報告。
上の画像のカーソルで選択している部分(PolygonShape.h)、Assignment2Aで作成したときにはCocoa/Cocoa.hをインポートしていますが、2BではCocoaが使えない(iPhoneアプリになるため)ので、Foundation/Foundation.hに書き換える必要がありました。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJUdBlkX7bkd00niMwvyTAS-x1jtEf4yXrvChreiwMqpL9EcPWrgGWyxoAM7KuFx5wCw7BMSI_Q2XQ7oBQbl38vXn_RvOtDWkIMp7i-fz0RoSa0QFFJSVflBRpSVigyS-x3sARfH7FRF4/s400/Assignment2B_02.png)
で、これが完成品です。
SwingやWin32API開発並みの苦行を覚悟していたのですが、あまりに簡単で逆に拍子抜け。はまりそうな点といえば、プロジェクトに新しくクラスをインポートしたり作成した後はInterface Builderからアプリケーションに登録しなければならないというところぐらいでしょうか。あと、awakeFromNibはコントローラに実装しないとだめ(間違えてPolygonShapeに一生懸命実装して、ビルド直前にこの過ちに気づきました)。
今のところは楽勝。問題はOpen GL ESに手を出すあたりからでしょうかね。