Unicode のバッファから NSString を生成する

普段は自前の Unicode 文字列クラス(もしくは std::basic_string)で管理していたとしても、描画したり NS〜 の API を呼ぶ際には NSString を作る必要がある。
しかし出来る限り NSString の生成コストを減らしたいという場合、以下のように書くのが良さそうな感じ。

NSString* ToNSString(const unichar* str, int len)
{
    return [[[NSString alloc] initWithCharactersNoCopy:str length:len freeWhenDone:NO] autorelease];
}

または

NSString* ToNSString(const unichar* str, int len)
{
    // CFString* と NSString* はこんぱちぶる(だったはず)
    return [(NSString*)CFStringCreateWithCharactersNoCopy(NULL, str, len, kCFAllocatorNull) autorelease];
}

autorelease が気になるような場所ならもちろん、

NSString* str = (NSString*)CFStringCreateWithCharactersNoCopy(NULL, str, len, kCFAllocatorNull);
// str を使ってごにょごにょ
[str release];

という感じに。