Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
Metaprogramming
•
0 likes
•
829 views
Akura Pi
1 of 13
Download now
Download to read offline
More Related Content
Metaprogramming
1.
Metaprogramming @akuraru
2.
自己紹介 • Scalaが好き • Objective-Cは生成するもの •
こわくない @akuraru
3.
メタプログラミング
4.
メタプログラミング • プログラミング技法の一種で、ロジックを直接コ ーディングするのではなく、あるパターンをもっ たロジックを生成する高位ロジックによってプロ グラミングを行う方法、またその高位ロジックを 定義する方法のこと。主に対象言語に埋め込まれ たマクロ言語によって行われる。
5.
メタプログラミング • クラスやメソッドを生成するロジックの事 • Objective-Cには実行時に行うことができる •
今回はコンパイル時にメソッドを増やす カテゴリの話
6.
カテゴリ • コンパイル時に既存のクラスにメソッ ドを追加、上書きできる機能 • 例 •
NSDate-Escort、MagicalRecord
7.
書き方 @interface NSDate (Escort) -
(BOOL)isToday; @end @implementation NSDate (Escort) - (BOOL)isToday { return [self isEqualToDateIgnoringTime:[NSDate date]]; } @end 参考:https://github.com/azu/NSDate-Escort
8.
実装 • コンパイル時に既存のクラスにメソッ ドを追加、上書きしている • ヘッダーをインポートしなくても実行 できる
9.
良いところ • 手軽 • ファイル分けができる •
テストするとき便利
10.
問題 • 同じクラスに同じメソッドを別のカテ ゴリで追加した場合、どちらかが適用 される • 実装ファイルがなくてもコンパイルエ ラーにならない •
責任過剰になりがち
11.
カテゴリを用いていい場合 • 複数クラスにメソッドを追加したい • それが自然と思える場合
12.
解決法 • 継承 • Static
Classを作る
13.
まとめ • 簡単に既存のクラスにメソッドを追加 できます • 何でもかんでもカテゴリで解決しない
Download