一、结构体
1. Range
1> 定义NSRange的三种方式
NSRange r1 = {2, 4}; // 第一个数字表示字符串的位置,第二个数字表示其长度 NSRange r2 = {.location = 2, .length = 4}; NSRange r3 = NSMakeRange(2, 4); // 掌握
2> 查找某个字符串的位置
NSString *str = @"i love oc"; NSRange range = [str rangeOfString:@"java"];
注意:如果找不到,range.length = 0, range.location == NSNotFound == -1
2. NSPoint与NSSize的使用
1> NSPoint的定义
NSPoint p1 = NSMakePoint(10, 10); NSPoint p2 = NSPointMake(20, 20); // 最常用,这里的 NS 可以换成 CG
2> NSSize的定义
NSSize s1 = NSMakeSize(100, 50); NSSize s2 = NSSizeMake(100, 50); // 同上
3. CGRect的使用
1> 定义CGRect的三种方式
CGRect r1 = CGRectMake(0, 0, 100, 50); CGRect r2 = { {0, 0}, {100, 90}}; CGRect r3 = {p1, s2}; CGRect r4 = {CGPointZero, CGSizeMake(100, 90)};
2> 将结构体转为字符串
NSString *str = NSStringFromPoint(p1); NSString *str = NSStringFromSize(s2); NSString *str = NSStringFromRect(r1);
二、NSString
1. 字符串的创建
NSString *s1 = @"iOS"; NSString *s2 = [[NSString alloc] initWithString:@"java"]; NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];
2. C字符串与OC字符串的互转
1> C字符 --> OC字符串
NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
2> OC字符串 --> C字符串
const char *cs = [s4 UTF8String];
3. 将文件转为字符串
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"文件路径" encoding:NSUTF8StringEncoding error:nil];
4. 通过URL创建字符串的几种方式
1> 获得URL的两种方式
NSURL *url1 = [[NSURL alloc] initWithString:@"文件路径"]; // file:///Users/apple/Desktop/1.txt NSURL *url2 = [NSURL fileURLWithPath:@"文件路径"]; // 推荐
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];
5. 字符串的导出
[@"字符串" writeToFile:@"这里不需要加上file://前缀,直接写文件路径" atomically:YES encoding:NSUTF8StringEncoding error:nil];
6. NSString和NSMutableString的区别
* 前者不可变,后者可变
* 后者常见的几个方法
// 在原来的字符串后面添加字符串 - (void)appendString:(NSString *)aString; // 通过指定的范围删除对应的字符串 - (void)deleteCharactersInRange:(NSRange)range; // 在字符串的后面添加字符串,并且返回一个新的字符串 - (NSString *)stringByAppendingString:(NSString *)aString;
三、NSArray
1. 数组的基本用法
1> OC数组不能存放nil值
2> OC数组只能存放OC对象,不能存放非OC对象类型,比如int,struct,enum
3> NSArray的创建
NSArray *array2 = [NSArray arrayWithObject:@"jack"]; NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
4> NSArray的快速创建法
NSArray *array4 = @[@"jack", @"rose", @"4324324"];
2. 数组的遍历
for (id obj in array) { // ... } /** * 数组的遍历 * * @param obj 便利到的对象 * @param idx 对应的下标 * @param stop 是否终止循环 * * @return void */ [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { // ... }]; // 推荐
3. 可变数组的基本用法
// 创建可变数组 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; // 添加元素 [array addObject:[[Person alloc] init]]; // 这里的Person是对象 [array addObject:@"jack"]; // 添加一个元素
注意:@[]只创建不可变数组NSArray
NSMutableArray *array = @[@"jack", @"rose"]; [array addObject:@"jim"]; // error
四、NSSet
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
五、NSDictionary
1. 字典创建的几种方式
NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]; NSArray *keys = @[@"name", @"address"]; NSArray *objects = @[@"jack", @"北京"]; NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys: @"jack", @"name", @"北京", @"address", @"32423434", @"qq", nil]; NSDictionary *dict4 = @{@"name" : @"jack", @"address" : @"北京"};
2. 字典常用的几种方法
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; // 添加键值对 [dict setObject:@"jack" forKey:@"name"]; [dict setObject:@"北京" forKey:@"address"]; // 移除键值对 [dict removeObjectForKey:@"jack"]; // 取出key为name的元素 NSString *str = dict[@"name"];
注意:
NSMutableDictionary *dict = @{@"name" : @"jack"}; // 这样创建出来的字典是不可变的 [dict setObject:@"rose" forKey:@"name"]; // error
3. 字典的遍历
字典不允许有相同的key,但允许有相同的value
[dict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { // ... }]; // 用法与上面的数组是一样的 掌握
集合总结:
1.NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1, obj2, obj3]
* 快速访问元素:数组名[i]
2.NSSet\NSMutableSet
* 无序
3.NSDictionary\NSMutableDictionary
* 无序
* 快速创建(不可变):@{key1 : value1, key2 : value2}
* 快速访问元素:字典名[key]