NSNullに関するTips & Hack

Objective-C が好きになる Tips & Hack

↑これホットエントリ入りして、たくさんの人がスライド見てる状況なんだけど、既存のAPIをCategoryでoverrideするという点に関してはバッドノウハウです。

Objective-CのCategoryは、既存のAPIを上書きした場合、元のAPIと上書きしたAPIのどちらが呼ばれるかは不定となっています。

Appleが公開している日本語ドキュメントにも

カテゴリのメソッド名の衝突を回避する
~~~~~略~~~~~
アプリケーションを他のフレームワークとリンクしたところ、
そこでもNSStringに独自のカテゴリを定義しており、
たまたま同じbase64EncodedStringというメソッドがありました。
実行時には、いずれか一方の実装がNSStringに追加されますが、
どちらになるかは不定です。
~~~~~略~~~~~

とあります。

なので、上書きしたAPIは"たまたま"上書きしたものが呼ばれていただけで、全体を通して、所望の動作をする事が保証されていないということになります。

だけど、JSONパースしたNSDictionaryに入ってくるNSNullに関しては糞うざいので、僕はNSDictionaryから値を取得する時にCategoryで、うざさを解消しています。

NSDictionary+KKWithoutNSNull.h

UIViewの座標とかをCategory作って変更できるようにするのはいいTipsだと思います:)

参考

Objective-Cによるプログラミング (TP40011210 2.3) - ProgrammingWithObjectiveC.pdf (参照しているドキュメントが日本語訳のものなので、最新の情報ではない可能性はあります)


質問したら回答あった。