1日30分英語

習慣化するために

1日30分英語

今までここは読書ブログだったのだけれど、リニューアルして英語ブログにします。

とりあえず、

今日覚えた事

  • only when
  • if の後は現在形
  • I'm worried about
  • In order to avoid my misunderstanding,
  • I should have confirmed that with you sooner.

今日の英単語

  • cyclist
  • attractive
  • deflated
  • work-out
  • sideburns
  • lean
  • endurance
  • retailer
  • persuade
  • desperately

今日の熟語

  • let alone

P62-78 メソッド

メソッドとは何か

  • 3要素:メソッド、セレクタ、メソッドの実装
  • Method型
struct objc_method {
  SEL method_name;
  char *method_types;
  IMP method_imp
}
  • SEL型
    • Opaque構造体として隠蔽されている
    • コード上で生成したC言語の文字列をセレクタとして使う事はできない
    • セレクタはランタイムによって確保された特別な文字列
  • IMP型
    • 関数ポインタ
typedef id (*IMP)(id, SEL, ...);
  • あるクラスに対するすべてのメソッドリストの取得
    • struct objc_method_list* class_nextMethodList(Class classObject, void** iterator);
  • 引数の型のエンコーディング
  • セレクタ配列
  • ビルトインセレクタ
    • objc-sel-table.hでCocoaで使われるセレクタが宣言されている
  • IMPの取得
NSString* object;
SEL selector;
object = @"Objective-C";
selector = @selector(length);

Method method;
IMP imp;
method = class_getInstanceMethod([object class], selector);
imp = method->method_imp; 
  • メソッド実装の食説呼び出し
    • 動的特性がなくなるが高速化できる

メソッドについて。凄く丁寧に解説されていて面白い。
しかし、この辺あまり使わなくてすぐに忘れそうなのが怖い。

Dynamic Objective-C

Dynamic Objective-C

P1-61 Objective-Cのエンジン部 ランタイムに踏み込む

"Pro Objective-C Design Patterns for iOS" がしんどいので "Dynamic Objective-C" を読み始めることにしました。前者はライフワーク的に思い出したら読む感じにします。

  • CocoaとObjective-Cと動的なオブジェクト指向
    • class-dumpでframeworkのクラスとメソッドが見れる
  • Objective-Cの動的型付け
  • Cocoa実現の肝 クラスとそのメソッドの調査方法をチェック
    • NSClassFromString
  • ターゲットーアクションパラダイム - 動的特性を利用したデザインパターン
    • メソッドの有無もターゲットの特性
  • ターゲットーアクションパラダイム - その利点を徹底検証
  • Cocoa-Javaの挑戦とは?
  • Objective-Cと様々な言語のブリッジ - PyObjC, RubyCocoa
  • カテゴリ
  • プロトコルが必要とされた背景
    • プロセス間通信ではプロトコルにて通信のエンコードを知っておいた方がパフォーマンスがよい
  • 非形式プロトコル
    • NSObjectのカテゴリとして宣言する
  • 2つのプロトコルの使い分け
    • 本書では形式プロトコルはすべてメソッドを実装するのを求められるから、デリゲートでは非形式の方を使う、と書いてあったが、Objective-C2.0からは@Optionalが使える
  • ポージングで乗っ取り
    • 使ったことがない。危なそう。便利なことができそうな気はする
  • Objective-Cのエンジン部 ランタイムに踏み込む
  • クラスとは何か
    • Class型は構造体objc_classのポインタ
    • すべてのクラス名を取得する int objc_getClassList(Class* buffer, int bufferLen);
    • メタクラス
    • id型とは構造体objc_objectのポインタ
      • isaをメンバーに持つ
      • インスタンスオブジェクトを確保するとこのisaの下にインスタンス変数の為のメモリが確保される
      • オブジェクトとは「クラス定義であるisaフィールドで始まり、インスタンス変数の為のメモリ領域を持つもの」
      • クラスもisaを持つのでクラスオブジェクトとして扱える

めちゃくちゃ面白いですね。クラスもオブジェクトも構造体だったとか。
そして本文の文体がいいですね。元がWeb連載だったからか語りかける文章で、ワクワクさせてくれます。

Dynamic Objective-C

Dynamic Objective-C

P116-233 Adapter Bridge Facade Mediator Observer Composite Iterator Visitor

  • Adapter
    • Brockを使ったAdapter
  • Bridge
  • Facade
    • 複雑な処理をまとめて、その処理の入口を提供する
  • Mediator
    • 複数のクラスの相互作用を集中させて処理を簡潔にする
    • UINavigationControllerもこのパターンとして機能している
  • Observer
    • Mediatorと似ているが、一対多で相互作用させる
    • Notificationの例
      • 前に使った事があるのでよく分かった。NotificationCenterで通知処理ができる
    • Key-Value Observingの例
      • よく分からず飛ばしてしまった。簡単らしい、とは書いてあった
  • Composite
    • ちょっと飛ばした。UIView, cocos2dのCCNode的な
  • Iterator
    • 飛ばし気味
  • Visitor
    • これも飛ばし気味
    • Compositeパターンとミックスしてる例

後半飛ばし気味で読んだ。
すげー時間かかっていて焦っている。洋書を読んだ事がないので入門としては凄くいいとは思っているけど。
そして、ダイナミックObjective-Cも買って読もうと思う。

Pro Objective-C Design Patterns for iOS

Pro Objective-C Design Patterns for iOS

P112-116 Adapter

Commandパターンとのカラみ。よくわからない。

いや〜進まないw

しかしとりあえず全部読もう。

Pro Objective-C Design Patterns for iOS

Pro Objective-C Design Patterns for iOS

P96-112 Singleton Adapter

  • Singleton
    • UIApplicationなど、インスタンスが唯一であると言う事を保証したクラス。
    • スレッドセーフにするには@synchronized() brocks or NSLockを使えとあったがそこはソースを具体的に書いていなかった。簡単なのかもしれないけど。
  • Adapter
    • Class AdapterとObject Adapterがある。

Pro Objective-C Design Patterns for iOS

Pro Objective-C Design Patterns for iOS