Obj.C

obj.C:delegateに進む前に

delegateに進む前に、これまでやっていたことを考えていたら、よくわかっていないことがあり、もう一度見直していました。

まず、これまでのサンプルコードをもう一度最初から書き直してから、viva Cocoa Objective-C入門を何回か読み直しながらコードにコメントを付加していきました。それから、オブジェクトの接続関係をキャプチャーし、それからメソッドの遷移図を整理しました。

遷移図

スクリーンショット 2014-01-26 23.29.43遷移図には、このあと、UIを閉じたときにこのサンプルプログラムをターミネートさせるメソッドがAppDelegateにありますが、これは割愛してあります。

  • この際、ついでにTestContやModelというクラス名は一般名称とまぎらわしいので、MesaCont、MesaModelに変更しました。
  • このほか変数名でユニークな名称にした方がいいかどうかも試しながら、そもそもこれは何なんだというような点を調べました。

次のような項目が少しわかってきました。

  • まず、簡単なことから。Text Viewオブジェクトを貼り付けたあと、File inspecterのUse Autolayoutのチェックを外さないと、Window➡Viewの上にText Viewを貼り付けた場合、buildで警告エラーがでることがわかりました。これは習慣的に外していたので、すぐに気がつきました。
  • 次にMesaContのinitの戻り値が異なるのはなぜなんだろうと調べていたら、確かに違うことが確認できました。最初からログを入れて調べれば早いでした。
  • setter / getterの箇所は、長い時間悩みました。これはXcode ARC時代のマイルールを読み、一目瞭然となりました。
    ① Objective-C 1.0時代にはgetter/setterに忠実に書く必要があった。
    ② Objective-C 2.0時代にはinterface変数の宣言は不要になり、@propertyと@synthesizeでgetter/setterを1行にまとめられるようになった。
    ③ARCの時代には、@implement中にinterface変数を定義できるようになった。
  • @propertyと@synthesizeは少し使った感じでは、こちらの方がやさしく、理解しやすいように思われました。現在のサンプルコードを書き換えようと思っています。
  • 基本的なこととして、オブジェクトの変化がトリガーになりイベント(メソッド)が発生するという流れがなんとなくわかりました。ゼロから作る考え方でなく、あり合わせのもので何ができるかに頭を切り替えないと、考え方が逆なのでうまくありません。
  • MVCについては、viva Cocoa Objective-C入門がそうなっていますので従っています。しかし、なぜそうなのかについてはいずれ勉強が必要です。

Categories: Obj.C, 技術

Tagged as: , , , , ,