Es gibt auch diese Variante, wenn Ihr ursprüngliches Array Schlüsselwertobjekte enthält, aus denen Sie nur eine Eigenschaft auswählen möchten (die als Zeichenfolge serialisiert werden kann):
@implementationNSArray(itertools)-(NSMutableString*)stringByJoiningOnProperty:(NSString*)property separator:(NSString*)separator
{NSMutableString*res =[@"" mutableCopy];
BOOL firstTime = YES;for(NSObject*obj in self){if(!firstTime){[res appendString:separator];}else{
firstTime = NO;}
id val =[obj valueForKey:property];if([val isKindOfClass:[NSStringclass]]){[res appendString:val];}else{[res appendString:[val stringValue]];}}return res;}@end
In Ihrem Code ist ein Speicherverlust aufgetreten. MutableCopy behält das zu kopierende Objekt bei, daher müssten Sie am Ende [res autorelease] zurückgeben. Es gibt auch keinen Grund, Mutablecopy zu machen, anstatt einfach einen Mutablestring direkt von der Fledermaus zu machen.
Thewormsterror
@thewormsterror: Ich habe vergessen zu erwähnen, dass dieser Code für ARC war. Der Mutablecopy-Aufruf ist auch die moderne Objective-C-Konvention zum Erstellen einer veränderlichen Version von Objekten mit @ -syntax (z. B. [@ [] mutablecopy] für einen veränderlichen nsarray). Ich weiß nicht, was für einen Unterschied es in Bezug auf die Leistung macht.
Antworten:
Dies ist die Umkehrung von
-[NSString componentsSeparatedByString:]
.quelle
-componentsJoinedByString:
auf NSArray sollte den Trick machen.quelle
Es gibt auch diese Variante, wenn Ihr ursprüngliches Array Schlüsselwertobjekte enthält, aus denen Sie nur eine Eigenschaft auswählen möchten (die als Zeichenfolge serialisiert werden kann):
quelle