iOSで3文字のクラスプレフィックス

ちょっと前にiOS(Objective-C)でクラスプレフィックスは2文字じゃなくて3文字にすべき。2文字はフレームワークで予約されている。など聞いた。おぼろげながらAppleが予約しているプレフィックスは使うなというのは読んだ覚えがあったが2文字を使うなとまで聞いた覚えがなかったので、ソース(情報源)を探してみようと思った。

あと、BlocksKitが変えたようにフレームワークのクラスにカテゴリで追加するメソッドにも3文字のプレフィックスを NSArray each: -> NSArray bk_each: のようにしてつけるべきという話も普及していきそうなのでそれも。

どうやら僕の2文字の話は以下から得た知識のように思う。
Introduction to Coding Guidelines for Cocoa
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

特に2文字じゃだめとは言及していない。さらに探すと別のドキュメントを発見。

Programming with Objective-C
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html

Two-letter prefixes like these are reserved by Apple for use in framework classes.

Your own classes should use three letter prefixes

で確かに 3文字にすべし と書いてあった。しかしUpdated: 2012-12-13 と書いてあり最近の話ではなさそうだ。今頃普及してきたのかな。

Programming with Objective-Cは 日本語ドキュメントにもみつかった ProgrammingWithObjectiveC.pdf

動作が不定になることを回避するため、フレームワーククラスにカテゴリを定義してメソッドを追加する際は、名前にプレフィックスをつけるようにするとよいでしょう。独自のクラスにプレフィックスをつけるのと同じ考え方です。クラス名のプレフィックスと同じ3文字の文字列を、メソッド名の規約に従って小文字にし、アンダースコアをはさんでメソッド名と連結してください。

カテゴリで追加するメソッドのプレフィックスについても書いてあった。今更ながらひと通り読んでおこう。