Quel est le moyen le plus sûr pour NSString de contenir faiblement un char const * appartenant à une chaîne std :: string? Les deux exemples ci-dessous fonctionnent sur un test simple, dans des logs, et comme présenté dans un NSTableView, mais je suis préoccupé par un comportement étrange jusqu'à la route. Il peut s'agir du caractère null supplémentaire de c_str() qui est simplement ignoré (à cause du paramètre length) et qui fonctionnera correctement.NSString contenant faiblement const char * de std :: string
Étant donné:
std::string const * stdstring = new std::string("Let's see if this works");
Puis:
NSString * aStr = [[NSString alloc] initWithBytesNoCopy:
stdstring->data() length: stdstring->length()
encoding:NSUTF8StringEncoding freeWhenDone:NO];
ou:
NSString * aStr2 = [[NSString alloc] initWithBytesNoCopy:
stdstring->c_str() length: stdstring->length()
encoding:NSUTF8StringEncoding freeWhenDone:NO];
ou autre chose?
Pour d'autres qui lisent ceci, la copie de chaîne est ridiculement bon marché dans la grande majorité des cas; à moins que vous n'écistiez d'énormes chaînes (100kB +), ne le risquez pas. Si vous faites cela, confirmez votre besoin de les charger en une seule chaîne en premier; et le profil avant de regarder les «accélérations» comme ça. – rvalue