黑马程序员技术交流社区
标题:
OC的Foundation框架
[打印本页]
作者:
344398083
时间:
2015-12-30 21:00
标题:
OC的Foundation框架
OC的Foundation框架 Foundation框架:
一:Foundation框架是Mac\iOS中其他框架的基础,内部包含了开发中常用的数据类型如:结构体、枚举和一些类
如果我们想使用Foundation框架中的功能,只要包含Foundation框架中的主头文件即可。
#import <Foundation/Foundation.h>
该框架提供了非常好用的类,都以NS开头,比如
NSString:字符串
NSArray:数组
NSDictionary:字典
NSDatte:日期
NSData:数据
NSNumber:数字
二:NSString
1,NSString的创建形式:
//------------ 第一种创建形式,最直接的形式
// 注意:这样创建的字符串存储在常量区(也就是内存只分配一次,以后要调用该字符串,直接从常量区读取
// NSString *str1 = @"你好China";
// NSString *str2 = @"你好China";
// NSLog(@"str1 = %p, str2 = %p", str1, str2);
/*
str1 = 0x100001040, str2 = 0x100001040
可以看到打印结果,证明这样直接创建的字符串存储在常量区
*/
//------------ 第二种创建形式,格式化的方法,通过NSString类的类方法
// NSString *str1 = [NSString stringWithFormat:@"%@", @"你好China"];
// NSString *str2 = [NSString stringWithFormat:@"%@", @"你好China"];
// NSLog(@"str1 = %p, str2 = %p", str1, str2);
/*
str1 = 0x100109ba0, str2 = 0x100103580
可以看到这样创建的字符串地址不相同,因为类方法的本质是通过[[NSString alloc] init]创建的因此每次创建都会分配内存地址
*/
//------------ 第二种创建形式,格式化的方法,通过对象方法创建
// NSString *str1 = [[NSString alloc] initWithFormat:@"%@", @"你好China"];
// NSString *str2 = [[NSString alloc] initWithFormat:@"%@", @"你好China"];
// NSLog(@"str1 = %p, str2 = %p", str1, str2);
/*
str1 = 0x100109bc0, str2 = 0x1001035a0
这样创建地址当然也不会相同
*/
2,注意: 对于直接写的字符串比如:@“abc”,这种叫做字符串常量。
字符串常量,保存在内存的常量区。对于相同的字符串常量,常量区只保存一份。所以上面的s1和s2看似是两个变量,但实际上都是指向了常量区的同一个字符串对象。
三:字符串在文本中的读取操作
NSString读入取出字符串的操作
// 1,读出文本文件中的内容
// 第一种方式:stringWithContentsOfFile
/* 参数:1,文件的全路径,OC中的File都是指文件的全路径
2, encoding:指文件读出时按什么格式的编码读取。(要想读取不出现乱码,那么写入时字符串用什么编码读取就用什么编码,一般计算机写入编码都是UTF-8
3,error:指指向对象指针的地址,如果读取失败,系统会修改error的错误信息
*/
// NSError *err = nil;
// NSString *text = [NSString stringWithContentsOfFile:@"/Users/ll/Desktop/text.txt" encoding:NSUTF8StringEncoding error:&err];
// if (err!=nil) {
// NSLog(@"读取失败");
// NSLog(@"%@", [err localizedDescription]);
// }else{
// NSLog(@"%@", text);
// }
// 第二种方式:stringWithContentsOfURL
// NSError *err = nil;
//
// // 注意:1,用URLWithString读取本地文件内容的话必须加:file://
// 2,通过URLWithString这种方式创建url的时候,如果路径中有中文字符则,报错!
// 3,如果路径中有中文,则使用另外一个方法来创建:
// NSURL *url = [NSURL fileURLWithPath:@"/Users/ll/Desktop/资料/text.txt"];
// NSURL *url = [NSURL URLWithString:@"file:///Users/ll/Desktop/text.txt"];
// NSString *text = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&err];
// if (err!=nil) {
// NSLog(@"读取失败");
// NSLog(@"%@", [err localizedDescription]);
// }else{
// NSLog(@"%@", text);
// }
// 2,写入到文件内容
// --------------第一种方式:writeToFile
/*
参数:atomically的YES表示当文件写入失败后就不创建文件
atomically的NO表示表示当文件写入失败后也可以创建文件
*/
// NSString *text = @"hello0, 中国";
// NSError *err = nil;
// [text writeToFile:@"/Users/ll/Desktop/text.txt" atomically:YES encoding:NSUTF8StringEncoding error:&err];
// if (err!=nil) {
// NSLog(@"写入失败");
// NSLog(@"%@", [err localizedDescription]);
// }else{
// NSLog(@"写入成功");
// }
//--------------第二种写入方法 writeToURL
// NSString *text = @"hello0, 中国";
// NSError *err = nil;
// NSURL *url = [NSURL URLWithString:@"file:///Users/ll/Desktop/text.txt"];
// [text writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:&err];
// if (err!=nil) {
// NSLog(@"写入失败");
// NSLog(@"%@", [err localizedDescription]);
// }else{
// NSLog(@"写入成功");
// }
补充:NSURL
URL:全称是Uniform Resource Locator(统一资源定位符)
URI:全称统一资源标示符
例如:http://www.baidu.com/m/a.png;
URL——>http://www.baidu.com/m/a.png;
URI——>a.png
URL的格式:
基本URL包含协议、主机域名(ip地址)、资源路径
可以简单认为URL==协议头:// 主机名/路径
常见的URL协议头
1>http\https:超文本传输协议
2>文件传输协议
3>本地文件
这些协议都是通信协议,协议约束了通信双方必须遵守的规则,只要遵守了这个规则,双方就能识别通信。(就如同战争时期的无线电密码,只要双方约束好了密码本,就可以知道密文内容)
方法网络资源的时候中文也需要先进行url encode编码
注意::1,用URLWithString读取本地文件内容的话必须加:file://
2,通过URLWithString这种方式创建url的时候,如果路径中有中文字符则,报错!
3,如果路径中有中文,则使用另外一个方法来创建:
NSURL *url = [NSURL fileURLWithPath:@"/Users/ll/Desktop/资料/text.txt”]; 而fileURLWithPath方法中不需要加file://
四:NSString中的一些方法
1,大小写处理方法
// ============== 一:NSString大小写处理方法
// 1,大写转小写操作
// NSString *str = @"heLLo, wORld"; // str指向的字符串在常量区
// NSLog(@"str = %p", str);
// str = [str lowercaseString]; // str指向的字符串在堆区
// NSLog(@"str = %p", str);
// NSLog(@"%@", str);
// 注意上面打印两个地址不同,说明NSString字符串是不可变字符串,对象方法返回一个新的地址
// 2,小写转大写
// NSString *str = @"heLLo, wORld";
// str = [str uppercaseString];
// NSLog(@"%@", str);
// 3,首字母变大写,其他字母变小写
// NSString *str = @"heLLo, wORld";
// str = [str capitalizedString];
// NSLog(@"%@", str); // 结果:Hello, World
2:NSString的比较方法
// 1,比较两个字符串中的内容是否相同
// NSString *str1 = @"ABC";
// NSString *str2 = @"ABC";
// BOOL b = [str1 isEqualToString:str2];
// NSLog(@"%d", b); // 结果 :1;
// 2,比较两个字符串的大小,注意:这个比较字符串中每一个字符的ACSII码值的大小
// NSString *str1 = @"NBA";
// NSString *str2 = @"CBA";
// NSComparisonResult result = [str1 compare:str2];
// switch (result) {
// case NSOrderedAscending: // 升序
// NSLog(@"str1<str2");
// break;
// case NSOrderedSame:
// NSLog(@"str1=str2");
// break;
// case NSOrderedDescending: // 降序
// NSLog(@"str1>str2");
// break;
// }
// /**
// * 注意:compare方法的返回值是一个枚举类型:NSComparisonResult
// 它有三个枚举值分别是:NSOrderedAscending: // 升序
// NSOrderedSame:// 相同
// NSOrderedDescending: // 降序
// */
// 3,也是比较字符串的大小,忽略字符串中的大小写进行比较:
// NSString *str1 = @"NBA";
// NSString *str2 = @"nba";
// NSComparisonResult result = [str1 caseInsensitiveCompare:str2];
// switch (result) {
// case NSOrderedAscending: // 升序
// NSLog(@"str1<str2");
// break;
// case NSOrderedSame:
// NSLog(@"str1=str2");
// break;
// case NSOrderedDescending: // 降序
// NSLog(@"str1>str2");
// break;
// }3,NSString的搜索方法
作者:
Bazinga
时间:
2015-12-30 23:23
还没学到,帮顶
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2