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 (参照しているドキュメントが日本語訳のものなので、最新の情報ではない可能性はあります)
質問したら回答あった。
@gin0606 いえ、不定だと思います!NSNull は何の実装も持たないクラスだという推測のもと作ったものなので乱暴なやり方ではあると思います。
— Taketo Sano (@taketo1024) 2014, 2月 26