Objective-C学习笔记三

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的方式解决问题。