stringByAppendingPathComponent, wie funktioniert es?

8

EDIT_v002

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

    
fuzzygoat 28.09.2009, 21:40
quelle

6 Antworten

15
  

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 .

    
Peter Hosey 29.09.2009, 03:02
quelle
5

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?

%Vor%

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:

%Vor%

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. : - (

    
Quinn Taylor 28.09.2009 22:15
quelle
4

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.

    
nall 28.09.2009 21:45
quelle
2

-stringByAppendingPathComponent gibt eine neue unveränderliche Zeichenfolge zurück, es ändert nicht das Original. Sie müssen den Rückgabewert dieser Methode verwenden.

    
dreamlax 28.09.2009 21:55
quelle
1

Die letzte Zeile sollte sein:

%Vor%     
André Hoffmann 28.09.2009 21:47
quelle
0
%Vor%     
ennuikiller 28.09.2009 21:44
quelle

Tags und Links