Chapter 3 : 字符串
1. 常用数据类型
-> NSRange : 表示范围作用的结构体,3种方式创建
// 方式一 NSRange range; range.location = 17; range.length = 4; // 方式二 NSRange range = {17, 4}; // 方式三 // 推荐 NSRange range = NSRangeMake(17, 4);
-> NSPoint : 点坐标
NSPoint point = NSPointMake(0, 0);
-> NSSize : 长度和宽度
NSSize size = NSSizeMake(10, 20);
-> NSRect : 矩形数据类型(由NSPoint和NSSize复合而成)
NSRect rect = NSRectMake(0, 0, 10, 20);
3. NSString : 表示字符串的类
// 创建字符串对象 NSString *string = [NSString stringWithFormat:@"You height is %d feet, %d inches", 5, 11]; // 返回字符串的个数 unsigned int length = [height length]; // 字符串比较 // 比较两个字符串的内容是否相等 - (BOOL)isEqualToString:(NSString *)aString; // 逐个字符比较 - (NSComparisonResult)compare:(NSString *)string; // 不区分大小写的比较 - (NSComparisonResult)compare:(NSString *)string options:(unsigned)mask;
PS : options是一个位掩码, 即:
NSCaseInsensitiveSearch : 不区分大小写
NSLiteralSearch : 进行完全比较,区分大小写
NSNumericSearch : 比较字符串的字符个数,而不是字符值
// 检查字符串是否以另一个字符串开头 - (BOOL)hasPrefix:(NSString *)aString; // 判定字符串是否以另一个字符串结尾 - (BOOL)hasSuffix:(NSString *)aString; // 判定字符串里是否包含其他字符串
// 根据NSRange的有效性做相应的判定 - (NSRange)rangeOfString:(NSString *)aString;
4. NSString和NSMutableString
-> NSString : 是不可变的
-> NSMutableString : 是可变的
// 创建NSMutableString NSMutableString *string = [NSMutableString stringWithCapacity:42]; // 附加新字符串 - (void)appendString:(NSString *)aString; - (void)appendFormat:(NSString *)format, ...; // 删除字符串中的字符 - (void)deleteCharactersInRange:(NSRange)range;
5. 集合家族:
-> NSArray : 用来存储对象的有序列表(任意类型的对象)。
PS : 只能存储Obj-C的对象,不能存储C语言的基本数据类型(int, float, enum, struct),同时也不能存储nil(对象的零值或NULL值)
// 创建一个新的NSArray NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil]; // 获得对象个数 - (unsigned)count; // 获得特定索引处的对象 - (id)objectAtIndex:(unsigned int)index; // 将NSString切分成一个NSArray NSString *string = @"oop:ack:bork:greeble:ponies"; NSArray *chunks = [string componentsSeparatedByString:@":"]; // 合并NSArray中的元素创建NSString string = [chunks componentsJoinedByString:@":-)"];
PS : NSArray中不可变数组,但数组中包含的对象是可以改变的,数组对象本身不会发变。
-> NSMutableArray : 可变数组
// 创建可变数组 NSMutableArray *array = [NSMutableArray arrayWithCapacity:17]; // 在数组末尾添加对象 - (void)addObject:(id)anObject; // 删除特定索引对象 - (void)removeObjectAtIndex:(unsigned int)index;
PS : NSMutableString还可以在特定索引处插入对象,替换对象,为数组排序。
-> NSEnumerator : 用来描述集合迭代器运算的方法:
// 使用NSEnumerator前提,需要通过objectEnumerator向数组请求枚举器 NSEnumerator *enumerator; // 顺序枚举 enumerator = [array objectEnumerator]; // 逆序枚举 enumerator = [array reverseobjectEnumerator]; // 获得枚举器后,开始while循环,每次循环都向这个枚举器请求它的nextObject - (id)nextObject; // 返回nil表循环结束
PS : 枚举过程中不能发变数组容器。
// 快速枚举示例 for (NSString *string in array) { NSLog(@"I found %@", string); }
关于排序:
// 数组排序 - (void)sort { [book sortUsingSelector:@selector(compareNames:)]; }
@selector(compareNames:) : 创建一个SEL类型的selector;
sortUsingSelector : 使用该方法比较数组中的两个元素。
- (NSComparisonResult)compareNames:(id)element { return [name compare:[element name]]; }
返回值为NSComparisonResult类型:
NSOrderedAscending : 小于
NSOrderedSame : 相等
NSOrderedDescending : 大于
-> NSDictionary : 关键字和定义的组合, 即在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象)。
// 创建NSDictionary Tire *t1 = [[Tire alloc] init]; NSDictionary *tires = [NSDictionary dictionaryWithObjectsAndKeys:t1, @"front-left", nil]; [t1 release]; // 获取NSDictionary中的值 Tire *tire = [Tires objectForKey:@"front-left"];
-> NSMutableDictionary : 可变字典类
// 创建字典类 NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:10]; // 或者 NSMutableDictionary *tires = [NSMutableDictionary dictionary]; // 添加元素 [tires setObject:t1 forKey:@"front-left"]; // PS : 若字典中已有的关键字使用setObject:forKey:方法,则用新的替换 // 移除元素 [tires removeObjectForKey:(id)aKey];
PS : 不要去创建NSString, NSArray或NSDictionary的子类,可用Category的方式解决问题。