Załóżmy Dostaję ciąg C z niektórych funkcji:Memory Management: NSString za stringWithCString: kodowanie:
char * mystring = SomeCFunction(...);
I mam ten ciąg (jestem odpowiedzialny za uwolnienie go kiedy skończę).
Jeżeli w Objective-C, tworzę NSString *
używając:
NSString * mynsstring = [NSString stringWithCString:mystring
encoding:NSUTF8StringEncoding];
jestem nadal odpowiedzialny za uwolnienie oryginalnego C ciąg?
Zakładam, że odpowiedź brzmi "tak", ale nie mogę znaleźć ostatecznej odpowiedzi w dokumentacji - a funkcjonalność odwrotnej metody (cStringUsingEncoding
), podczas gdy sensowna, daje mi pauzę, ponieważ obsługuje cString wyzwalający dla ciebie.
Jeśli odpowiedź brzmi "tak", to czy jestem również odpowiedzialny za upewnienie się, że nie zwolniłem ciągu znaków c przed zakończeniem korzystania z NSString *
, czy funkcja kopiuje dla mnie ciąg? Pytam o to, ponieważ dokumentacja stringWithCString
mówi:
Zwraca ciąg zawierający bajty w danej macierzy C, interpretować według danym kodowaniu.
Co nadal pozostawia mnie zastanawiającego się, czy faktycznie skopiował bajty, czy po prostu wskazuje na nie wewnętrznie (a ja po prostu robię obsadę).
Ah! Jesteś niesamowity. Dziękuję Ci! Przyjmuję odpowiedź po upływie 6 minut, które pozostały w czasomierzu akceptującym blokowanie. – Steve
To powinno być na docs –
@ AndréFratelli Proponuję złożyć opinię (istnieje link na dole każdej strony dokumentacji online), więc Apple dodaje to tam ;-) – AliSoftware