llvmソースコードから、コンパイラがフラグをサポートしていることに気づきました。
-fconstant-string-class=CLASSNAME
このフラグが存在しない場合、コンパイラはデフォルトでNSConstantStringに設定されているように見えます。
AppleのFoundationLibraryを調べると、NSConstantStringはNSSimpleCStringを継承します。これは、ObjCConstantStringの動作を有効にするために必要なivarを提供します。これは、NSStringの子クラスです。
ただし、通常のObjCコードでは、次のことが完全に合法です。
NSString *anNSString = @"This is an NSConstantString?";
これは問題ないようです(NSConstantStringは子クラスです)。ただし、次の点が異なります。
1)定数文字列のデータは、NSStringでは使用できないNSSimpleCStringで宣言されたivarにファネルする必要があります。
2)NSStringの反復法は、unicharの配列に基づいて構築されていることを示唆しています。これは、NSConstantStringのcharからNSStringのunicharへの変換が必要であることを意味します。
Objective Cでは演算子のオーバーロードは不可能なので、この変換はどのように/どこで行うことができますか?ここで起こっているコード生成のトリックはありますか?それとも私はもっと明白な何かを逃したことがありますか?