Test harness:
// clang strings1.m -o prog -framework Foundation -fobjc-gc-only
#include <Foundation/Foundation.h>
int main(int argc, char * argv[]) {
// ..code here..
return 0;
}
|
NSString *s;
NSMutableArray *ma = [NSMutableArray arrayWithCapacity:10];
char *cstr = "abc"; // real C string w/ "\0" also works
uint ascii = NSASCIIStringEncoding;
uint utf8 = NSUTF8StringEncoding;
[ma addObject:[NSString stringWithCString:cstr encoding:ascii]];
[ma addObject:[NSString stringWithCString:cstr encoding:utf8]];
[ma addObject:[NSString stringWithUTF8String:cstr]];
NSMutableString *ms = [[NSMutableString alloc] init];
[ms appendString:@"abde"];
[ms insertString:@"c" atIndex:2];
[ma addObject:[ms copy]]; // otherwise code below will alter
[ms appendString:@"fghij"];
[ms replaceOccurrencesOfString:@"B"
withString:@"*"
options:NSCaseInsensitiveSearch
range:NSMakeRange(0,2) ];
[ma addObject:ms];
for (id obj in ma) { NSLog(@"%@ %@", obj, [obj class]); }
[ma removeAllObjects];
printf("-----------------\n"); |
> ./prog 2012-05-29 16:45:03.624 prog[444:707] abc __NSCFString 2012-05-29 16:45:03.626 prog[444:707] abc __NSCFString 2012-05-29 16:45:03.627 prog[444:707] abc __NSCFString 2012-05-29 16:45:03.627 prog[444:707] abcde __NSCFString 2012-05-29 16:45:03.628 prog[444:707] a*cdefghij __NSCFString ----------------- |
[ma addObject:[NSString stringWithFormat:@"abcd"]];
[ma addObject:[NSString stringWithFormat:@"ab%@", @"cd" @"ef"]];
[ma addObject:[NSString stringWithFormat:@"a%C%C", 0x62, 0x63]];
char b[] = { 0x61, 0x62, 0x63, 0x64, 0x65 };
NSData *d = [NSData dataWithBytes:b length:5];
s = [[NSString alloc] initWithData:d encoding:utf8];
[ma addObject:s];
for (id obj in ma) { NSLog(@"%@ %@", obj, [obj class]); }
printf("-----------------\n"); |
2012-05-29 16:45:03.629 prog[444:707] abcd __NSCFString 2012-05-29 16:45:03.629 prog[444:707] abcdef __NSCFString 2012-05-29 16:45:03.630 prog[444:707] abc __NSCFString 2012-05-29 16:45:03.630 prog[444:707] abcde __NSCFString ----------------- |
d = [NSData dataWithBytes:b length:5];
[d writeToFile:@"x" atomically:YES];
NSError *err = nil;
NSStringEncoding enc = NSUTF8StringEncoding;
s = [NSString stringWithContentsOfFile:@"x"
usedEncoding:&enc
error:&err];
if (err != nil) { NSLog(@"%@", [err userInfo]); }
else { NSLog(@"%@", s ); }
b[4] = 0xff;
d = [NSData dataWithBytes:b length:5];
[d writeToFile:@"x" atomically:YES];
s = [NSString stringWithContentsOfFile:@"x"
usedEncoding:&enc
error:&err];
if (err != nil) { NSLog(@"%@", [err localizedDescription]); }
else { NSLog(@"%@", s ); } |
2012-05-29 16:45:03.641 prog[444:707] abcde 2012-05-29 16:45:03.658 prog[444:707] The file “x” couldn’t be opened because the text encoding of its contents can’t be determined. |