Istnieje również ten wariant, jeśli oryginalna tablica zawiera obiekty klucz-wartość, z których chcesz wybrać tylko jedną właściwość (którą można serializować jako ciąg):
@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
W twoim kodzie występuje przeciek pamięci, mutableCopy zachowuje kopiowany obiekt, dlatego na końcu musisz zwrócić [res autorelease]. Nie ma też powodu, aby robić mutablekopy zamiast po prostu zrobić mutablestring prosto z nietoperza.
thewormsterror
@thewormsterror: zapomniałem wspomnieć, że ten kod jest przeznaczony dla ARC. Ponadto wywołanie mutablecopy jest nowoczesną konwencją Objective-c do tworzenia mutowalnych wersji obiektów przy użyciu @ -syntax (na przykład [@ [] mutablecopy] dla mutowalnej tablicy nsarray). Nie wiem, jaka różnica sprawia, że wydajność jest mądra.
Odpowiedzi:
To jest odwrotność
-[NSString componentsSeparatedByString:]
.źródło
-componentsJoinedByString:
na NSArray powinno załatwić sprawę.źródło
Istnieje również ten wariant, jeśli oryginalna tablica zawiera obiekty klucz-wartość, z których chcesz wybrać tylko jedną właściwość (którą można serializować jako ciąg):
źródło