Ich habe mir alle Kommentare angeschaut und ich beginne zu sehen, was ich tun soll. Zu diesem Zweck habe ich meinen Code geändert (siehe unten). Ich habe newPath in einen NSString geändert, die [[alloc] init] und das Ende [release] entfernt, wie es jetzt vom System gehandhabt wird. Ich benutze StringByAppendingPathComponent und lasse ein Trennzeichen zwischen rootPath und fileName hinzufügen, bevor es dem NSString zugewiesen wird. Es funktioniert, und ich habe es ohne Probleme durch den statischen Analysator laufen lassen.
%Vor%Gary
stringByAppendingPathComponent, wie funktioniert es?
Einfach. Sie möchten eine Pfadkomponente anhängen. Sie senden diese Nachricht an die Zeichenfolge, an die Sie eine Pfadkomponente anhängen möchten, und übergeben die Pfadkomponente, die Sie anhängen möchten.
Pfadkomponenten sind nicht die Schrägstriche; Wenn dies der Fall wäre, würde die Methode pathComponents
nur ein Array von Schrägstrichen zurückgeben. Pfadkomponenten sind die Teile zwischen den Schrägstrichen (obwohl es einen speziellen Fall gibt, der in der Definition von pathComponents
beschrieben wird).
Der Schrägstrich ist der Pfad separator . Dies ist in Kakao fest codiert; es ist derzeit (und wahrscheinlich immer) ein Schrägstrich. Wenn Sie also wirklich einen Schrägstrich an eine Zeichenfolge anhängen möchten, ist der wahrscheinlichste Grund, dass Sie einen Pfad separator , keine Pfad -Komponente anfügen möchten.
%Vor%
fileName
ist die Komponente, die Sie hinzufügen möchten. Verwenden Sie stringByAppendingPathComponent:
und übergeben Sie fileName
, keinen Schrägstrich.
Ob Ihr Beispiel leckt: Nun, fällt ein Objekt aus dem Rahmen, ohne dass es freigegeben wird? Die Antwort auf diese Frage ist die Antwort darauf, ob es sich um ein Leck handelt. Wenn Sie sich nicht sicher sind, lesen Sie die Speicherverwaltungsregeln .
Bei allen vorhandenen Antworten wird die ursprüngliche Zeichenfolge testPath
verloren. Für etwas so einfaches wie das, warum hat niemand empfohlen, -[NSMutableString appendString:]
intead?
Es gibt kein Äquivalent zu -stringByAppendingPathComponent:
für NSMutableString, aber es sieht so aus, als ob er nur versucht, einen Schrägstrich hinzuzufügen, keine Pfadkomponente. Wenn Sie wirklich eine Pfadkomponente hinzufügen möchten, können Sie dies tun:
Dies ist eine lästige Problemumgehung, aber @dreamlax weist darauf hin, dass -stringByAppendingPathComponent:
immer eine unveränderliche Zeichenfolge zurückgibt, selbst wenn sie für ein NSMutableString-Objekt aufgerufen wird. : - (
Sie fügen das Trennzeichen nicht an. Sie hängen die nächste Pfadkomponente an (zB Dateiname, Verzeichnis, etc). Dadurch müssen Sie das Begrenzungszeichen für Ihr System nicht kennen.
%Vor%Es gibt ein ziemlich klares Beispiel in die Dokumentation.
Tags und Links objective-c cocoa