2016-06-28 1 views
0

Der statische Analysator in Xcode 8 (Beta 1) warnt mich, dass NSString 's initWithBytesNoCopy:length:encoding:freeWhenDone: nicht Besitz von Speicher übernehmen kann, der von new[] zugeteilt wird. Ist das ein Fehler? Wenn nicht, warum ist das der Fall?Warum kann NSString den Speicher nicht übernehmen, der mit new reserviert wurde?

Wenn ich meine Zuordnung ändern, um calloc anstelle von new[] zu verwenden, verschwindet die Warnung.

+1

Ich denke, NSString und C++ nicht sehr gut mischen. – Avi

+0

@ user3386109 Dies als Antwort posten. –

+0

@ AminNegm-Awad Ok, ich habe den Kommentar in eine Antwort umgewandelt. – user3386109

Antwort

4

Die Dokumentation sagt über die freeWhenDone Parameter:

Wenn JA, der Empfänger gibt den Speicher mit free(), wenn es nicht mehr die Daten benötigt; Wenn NEIN, wird es nicht.

So ruft freeWhenDone wörtlich free() wenn getan. Um mit new[] zu arbeiten, müsste es delete[] wenn getan. Daher ist die Warnmeldung korrekt. Wenn Sie die Bytes nicht kopieren möchten, müssen Sie freeWhenDone auf NO und delete[] die Bytes setzen, wenn sie nicht mehr benötigt werden.

Verwandte Themen