2010-10-09 11 views

risposta

9

Un'istanza NSString non può essere modificata una volta inizializzata, è "immutabile". Nessun metodo NSString può modificare il valore della stringa.

NSMutableString può essere modificato dopo l'inizializzazione.

0

Solo per ampliare la risposta di Andy White, potrebbero esserci dei vantaggi in termini di prestazioni nell'utilizzo di NSString invece di NSMutableString nel codice (come sempre, testare gli strumenti delle prestazioni di Apple per accertarsi che questo sia veramente il collo di bottiglia delle prestazioni). Nella situazione in cui si desidera modificare il valore di una NSString, un'opzione è quella di creare una NSString completamente nuova con il valore alterato in essa e quindi distruggere la vecchia NSString.

36

Supponiamo di avere un codice come questo

NSString *s = [[NSString alloc] initWithString:@"Hello"]; 

s = [s stringByAppendingString:@"World"]; 

e altro codice come questo

NSMutableString *ms = [[NSMutableString alloc] initWithString:@"Hello"]; 

[ms appendString:@"World"]; 

Entrambi questi, funzionalmente, fare la stessa cosa tranne che per una differenza - il principali perdite di codice. - [NSString stringByAppendingString:] genera un nuovo oggetto NSString immutabile che indica quindi al puntatore s di puntare. Nel processo, tuttavia, si rende orfano l'oggetto NSString che è stato originariamente indicato. Sostituendo la riga come segue sarebbe sbarazzarsi della perdita:

s = [[s autorelease] stringByAppendingString:@"World"]; 
+1

Si tratta ancora di un problema con il framework ARC? – sunny

35

La differenza tra NSMutableString e NSString è che

NSMutableString:NSMutableString oggetti forniscono metodi per modificare la matrice sottostante di caratteri che rappresentano, mentre NSString no. Ad esempio, NSMutableString espone metodi come appendString, deleteCharactersInRange, insertString, replaceOccurencesWithString, ecc Tutti questi metodi funzionano sulla corda come esiste in memoria.

NSString: d'altra parte è solo una stringa di creare-once-poi-read-only se si vuole; scoprirai che tutti i suoi metodi di "manipolazione" (sottostringa, uppercaseString, ecc.) restituiscono altri oggetti NSString e non modificano mai effettivamente la stringa esistente in memoria.

Problemi correlati