------iOS培训、Java培训、Android培训, iOS学习型技术博客,期待与您交流------
/*
NSString : 不可变字符串
NSMutableString : 可变字符串
*/
NSString
// OC字符串NSString的创建
void createNSString()
{
/*
字符串的创建方式1 --- 对象方法initWithxxx
*/
NSString *s1 = @"Peak";
// NSString *s2 = [[NSString alloc] initWithString:@"Peak"];
NSString *s3 = [[NSString alloc] initWithFormat:@"Peak"];
NSString *s4 = [[NSString alloc] initWithFormat:@"name is %@, age is %d", @"Peak", 25];
// C语言字符串--->OC字符串
NSString *s5 = [[NSString alloc] initWithUTF8String:"Peak"];
// OC字符串--->C语言字符串
char *str= [s5 UTF8String];
// 从文件(绝对路径/)中读取内容,返回OC字符串
// NSUTF8StringEncoding 用到中文使用这种编码 如果获取不到内容,返回(null) 可以换不同的编码进行尝试
NSString *s6 = [[NSString alloc] initWithContentsOfFile:@"/Users/Mac/Desktop/a.txt" encoding:NSUTF16StringEncoding error:nil];
// URL : 资源路径 协议头://路径
// 网络 http://
// 本地 file://绝对路径 (3个/)
// ftp://
NSURL *url = [[NSURL alloc] initWithString:@"http://baidu.com"];
NSString *s7 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
/*
字符串的创建方式2 --- 对象方法相应的类方法stringWithxxx
一般都有一个类方法和对象方法配对
类方法名一般以类名(类名With)开头
*/
NSString *s8 = [NSString stringWithFormat:@"Peak"];
NSString *s9 = [NSString stringWithFormat:@"name is %@, age is %d", @"Peak", 25];
NSString *s10 = [NSString stringWithContentsOfFile:@"/Users/Mac/Desktop/a.txt" encoding:NSUTF16StringEncoding error:nil];
NSURL *url2 = [NSURL URLWithString:@"http://sougou.com"]; // NSURL的类方法URLWithxxx
NSURL *url3 = [NSURL fileURLWithPath:@"/Users/Mac/Desktop/Mac快捷键.txt"]; // 文件名可以有中文
// NSURL *url4 = [NSURL URLWithString:@"file:///Users/Mac/Desktop/Mac快捷键.txt"]; // 文件名不能有中文
NSString *s11 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"\n%@", s11);
}
// 把OC字符串NSString写出去(写到文件)
void writeTo()
{
// 把OC字符串写到一个文件中,如果该文件不存在,就自动创建该文件
[@"Hello Peak" writeToFile:@"/Users/Mac/Desktop/a.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSURL *url = [NSURL fileURLWithPath:@"/Users/Mac/Desktop/aa.txt"];
NSURL *url2 = [NSURL URLWithString:@"file:///Users/Mac/Desktop/a.txt"]; // 文件名有中文不行
NSString *s = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];
[@"Hello World" writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", s);
}
NSArray(有序)
OC数组NSArray只能存放OC对象,不能存放非OC对象类型,比如int、struct、enum。。。
当把一个对象放入数组中,该对象的计数器会+1,也就是说 数组会对该对象做一次retain操作
当数组被销毁时,会自动对里面的所有元素对象做一次release---数组里所有元素的计数器-1
/*
OC数组只能存放OC对象
NSArray : 不可变数组
NSMutableArray : 可变数组
*/
void baseUseNSArray()
{
// NSArray是不可变数组,意味着 a1永远是空数组
NSArray *a1 = [NSArray array];
// nil是数组元素结束的标记,不能省略
NSArray *a2 = [NSArray arrayWithObjects:@"Peak", @"heima", nil];
// NSLog(@"%@", a2[0]); // a2[1] 编译器会自动转为 [a2 objectAtIndex:1]
// 快速创建一个NSArray对象
NSArray *array = @[ @"Hello", @"Peak", @"heima"]; // 编译器特性,会自动将代码转换
// NSLog(@"%@", array);
// 遍历数组元素1 id obj代表数组a3中的每一个元素
for (id obj in array)
{
NSUInteger i = [array indexOfObject:obj]; // 返回对象obj在数组array中的索引位置
NSLog(@"array[%ld] = %@", i, obj);
}
// 遍历数组元素2 ---推荐使用
// 每遍历到一个元素,就会 调用 一次block,
// 并且把当前元素和索引位置当做参数传递给block
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
// if (1 == idx) {
// *stop = YES;
// }
*stop = YES; // 停止遍历
NSLog(@"array[%ld] = %@", idx, obj); // obj为数组每个元素对象, idx为元素索引
*stop = NO; // 不停止遍历
}];
}
NSDictionary(键值对 排列 无序———直接用@"%@"打印是按照key的abc排序打印 键值对)
void baseUseNSDictionary()
{
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"Peak" forKey:@"name"];
NSArray *keys = @[@"name", @"address"];
NSArray *objs = @[@"Peak", @"浙江"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
/* 可读性不好
NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
@"Peak", @"name",
@"浙江", @"address",
@"18600000000", @"phone",
@"Peak", @"name2",
@"浙江", @"address2",
@"18600000000", @"phone2",
nil];
*/
// 编译器特性: 快速创建 一个NSDictionary对象
NSDictionary *dict3 = @{@"name": @"Peak",
@"address": @"浙江"};
// 编译器特性: 快速访问某个键值对(快速根据一个key访问相应的object)
id obj = dict3[@"name"]; // 编译器会自动转为---等价于 [dict3 objectForKey:@"name"]
NSLog(@"%@", dict3);
NSLog(@"%@", obj);
NSLog(@"%@", [dict3 objectForKey:@"address"]);
// NSMutableDictionary的使用
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"Peak" forKey:@"name"];
NSLog(@"%@", dict);
}
Foundation---集合类总结
1. NSArray\NSMutableArray
* 有序
* 快速创建(不可变) @[obj1, obj2, obj3, …...];
* 快速访问元素 数组对象名[i];
2. NSSet\NSMutableSet
* 无序
3. NSDictionary\NSMutableDictionary
* 无序
* 快速创建(不可变) @{key1 : object1, key2 : object2, …...};
* 快速访问元素 字典对象名 key];