Me gustaría hacer una serie de sustituciones de cadenas a los caracteres eliminados xml-escap, como '&'
.¿Manipulación de cadenas sin pérdidas de memoria?
1) ¿Existe una función de UIKit que pueda hacer esto?
2) De no ser así, ¿cuál es la mejor manera de hacerlo sin tener pérdidas de memoria? Esta es la idea:
-(NSString*) unescape:(NSString*)string
{
string = [string stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
string = [string stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
string = [string stringByReplacingOccurrencesOfString:@""" withString:@"\""];
string = [string stringByReplacingOccurrencesOfString:@">" withString:@">"];
string = [string stringByReplacingOccurrencesOfString:@"<" withString:@"<"];
return string;
}
Pero no que la memoria de fugas con cada tarea? ¿O stringByReplacingOccurrencesOfString devuelve cadenas autoreleased? ¿Cómo confirmamos que las cadenas stringByReplacingOccurrencesOfString se liberan automáticamente? ¿O deberíamos envolverlos con [... autorelease]
?
Incluso si se lanzan automáticamente, es preferible evitar la liberación automática en el iPhone. (Ver here). Entonces lo haríamos:
-(NSString*) unescape:(NSString*)string
{
NSString* string2 = [string stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
// don't release 'string' because we didn't allocate or retain it
NSString* string3 = [string2 stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
[string2 release];
NSString* string4 = [string3 stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
[string3 release];
//...and so on
}
Pero ese es un código bastante feo. ¿Cuál es la mejor manera de escribir este código para hacer múltiples sustituciones? ¿Como lo harias?
¿Por qué debería ser un puntero a un puntero NSMutableString? Creo que el "punto" (heh) de usar un NSMutableString es que es mutable, así que ¿no podrías simplemente pasar un puntero NSMutableString simple y hacer que el cuerpo del método mute el NSMutableString al que apunta? – erikprice
Tienes razón. Por alguna razón, estaba pensando en crear una instancia completamente nueva dentro del método, que es lo que sucede con NSError. Arreglaré el texto. –