黑马程序员-----OC学习之Foundation中的类
2015-08-19 10:30
471 查看
Foundation中的类:
NSString:不可变字符串:
字符串的创建方式:
1) 最直接的方式(这是常量字符串):注意这种写法,字符串存储在内存的常量区,地址一样;
NSString *str1 = @"abc";
2) 格式化的方式:注意这种写法,字符串存储在内存的堆区(地址不一样)
NSString *str2 = [NSString stringWithFormat:@"%@", @"jack"];
NSString *str3 = [[NSString alloc] initWithFormat:@"My age is %d", 10];//基本不用;
3) 从文件中读取
NSString *str4 = [NSString stringWithContentsOfFile:@"/Users/apple/Desktop/t.txt" encoding:NSUTF8StringEncoding error:&err];
4) 从URL中读取
传入完整的字符串创建
NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/str.txt"];
通过文件路径创建(默认就是file协议的)
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/str.txt"];
通过NSString进行文件读写
****方式一, 直接根据给定的路径来读写文件(一般用来读取本地文件)
*文件写入: [str1 writeToFile:@"路径" atomically:YES
encoding:NSUTF8StringEncoding error:nil];
*文件读取: [NSString stringWithContentsOfFile:@"路径"
encoding:NSUTF8StringEncoding error:nil];
****方式二, 根据给定的NSURL对象来读写文件(一般用来读取网络资源文件) **** 1> 根据路径创建NSURL对象。
** 创建NSURL的两种方式:
1. NSURL *url = [NSURL URLWithString:@"file:///Users/Steve/Desktop/传智iOS13 期-OC基础加强/PPTs/str1.txt"];
** 通过这种方式创建NSURL对象, 需要指定协议类型, 比如"http://" 、 "ftp://" 、 "file://" 、"https://"等协议。
** 通过这种方式创建的NSURL, 如果路径中有中文, 则无法正常使用, 需要使用下面的方 式来创建。
2. NSURL *url = [NSURL fileURLWithPath:@"/Users/Steve/Desktop/传智iOS13期-OC基 础加强/PPTs/str1.txt"];
** 这种方式创建的NSURL对象, 默认就是读取本地文件的NSURL对象, 以"file://" 开头
2> 根据NSURL对象来读取文件内容。
* [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:
&err];
5> NSString的常见方法:
- (NSString *)uppercaseString; //全部字符转为大写字母
- (NSString *)lowercaseString //全部字符转为小写字母
- (NSString *)capitalizedString
//首字母变大写,其他字母都变小写。如果一个句子中有多个单词,那么会将每个单词的首字母 变成大写,其余字母变成小写
- (BOOL)isEqualToString:(NSString *)aString; //两个字符串的内容相同就返回YES, 否则返回NO
//注意: == 比较的是两个对象的地址是否相同, 不是字符串内容
- (NSComparisonResult)compare:(NSString *)string; 这个方法可以用来比较两个字符串内容的大小
//比较方法: 逐个字符地进行比较ASCII值,返回NSComparisonResult作为比较结果
NSComparisonResult是一个枚举,有3个值:
如果左侧 > 右侧,返回NSOrderedDescending,
如果左侧 < 右侧,返回NSOrderedAscending,
如果左侧 == 右侧返回NSOrderedSame
- (NSComparisonResult) caseInsensitiveCompare:(NSString *)string; 忽略大小写进行比较,返回值与compare:一致
- (BOOL)hasPrefix:(NSString *)aString; 是否以aStr
NSString的子类NSMutableString:可变字符串;
对比NSString:
都创建一个字符创
NSString *s1 = [NSString stringWithFormat:@“age is %d”,10];
NSMutableString *s2 = [NSMutableString stringWithFormat:@“age is %d”,10];
因为s1是固定不变的,所以s1一直是 age is 10;
而s2是可变的 所以我们可以在后面加字符创如:
[s2 appendString:@“11 12”];//这是个给字符串加字符的函数;
这样s2这个字符串就变成了 age is 10 11 12;
我们既然可以加字符 也可以删除字符 例如 :
[s2 deleteCharactersInRange:NSMakeRange(4,2)];//这是表示将一个范围的字符串删除;
经过上述操作之后,我们的age is 10 中的10就会被删除了;当然我们要准确的找出要删除的内容 我们通常还会用到一个
rangeOfString这个函数
1. NSRange range = [s2 rangeOfString :@“is”];这就表示获取字符串中is的范围;
2.[s2 deleteCharactersInRange:range];//删除is字符串;
NSArray:表示一个OC数组,是一个不可变数组
1.NSArray的创建:
NSArray *array1 = [NSArray arrayWithObject:@“jack” ,“rose”,nil;]//这就表示创建了一个OC数组 里面有一个元素jack
快速创建的方法:
NSArray *array2 = @[p,@“jack”]//p使我们创建的对象;
//nil是表示前面的是数组的元素作为结束标志;
2.NSArray的元素个数:
array.count == [array count];就像是调用方法;
NSArray中元素的访问:
跟c语言中的数组访问一样 array[0],表示第一个元素;
遍历数组:
1.for int i = 0 ;i<array.count;i++{
NSLog(@“%@”,array[i]);
}
2.for (id obj in array)
{
//找出obj元素在数组中的位置;
NSUIntege i= [array indexOfObject:obj];
NSLog(@“%ld - %@”,i,obj);
}
3.[array enumerateObjectsUsingBlock]:
^(id obj,NSUInteger idx,BOOL *stop)
{
NSLog(@“%ld - %@”,idx,obj);
}
NSMutableArray:NSArray的子类 是一个不可变数组
NSDictionary:表示OC中的不可变字典:
NSMutableDictionary:NSDictionary的子类 是一个可变字典
NSString:不可变字符串:
//快速创建 NSString *str = @"this is just a demo"; //格式化创建 int a=2; NSString *str2 = [[NSString alloc]initWithFormat:@"this is a demo%d",a ]; NSString *str3= [[NSString alloc]initWithUTF8String:"just a demo"]; //从文件中加载 NSString *str4 = [[NSString alloc]initWithContentsOfFile:@"/Users/shmily/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil]; //从 url 中加载 NSURL *url = [NSURL URLWithString:@"file:///Users/shmily/Desktop/1.txt"]; NSString *str5 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"%@\n%@\n%@\n%@\n%@",str,str2,str3,str4,str5);
字符串的创建方式:
1) 最直接的方式(这是常量字符串):注意这种写法,字符串存储在内存的常量区,地址一样;
NSString *str1 = @"abc";
2) 格式化的方式:注意这种写法,字符串存储在内存的堆区(地址不一样)
NSString *str2 = [NSString stringWithFormat:@"%@", @"jack"];
NSString *str3 = [[NSString alloc] initWithFormat:@"My age is %d", 10];//基本不用;
3) 从文件中读取
NSString *str4 = [NSString stringWithContentsOfFile:@"/Users/apple/Desktop/t.txt" encoding:NSUTF8StringEncoding error:&err];
4) 从URL中读取
传入完整的字符串创建
NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/str.txt"];
通过文件路径创建(默认就是file协议的)
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/str.txt"];
通过NSString进行文件读写
****方式一, 直接根据给定的路径来读写文件(一般用来读取本地文件)
*文件写入: [str1 writeToFile:@"路径" atomically:YES
encoding:NSUTF8StringEncoding error:nil];
*文件读取: [NSString stringWithContentsOfFile:@"路径"
encoding:NSUTF8StringEncoding error:nil];
****方式二, 根据给定的NSURL对象来读写文件(一般用来读取网络资源文件) **** 1> 根据路径创建NSURL对象。
** 创建NSURL的两种方式:
1. NSURL *url = [NSURL URLWithString:@"file:///Users/Steve/Desktop/传智iOS13 期-OC基础加强/PPTs/str1.txt"];
** 通过这种方式创建NSURL对象, 需要指定协议类型, 比如"http://" 、 "ftp://" 、 "file://" 、"https://"等协议。
** 通过这种方式创建的NSURL, 如果路径中有中文, 则无法正常使用, 需要使用下面的方 式来创建。
2. NSURL *url = [NSURL fileURLWithPath:@"/Users/Steve/Desktop/传智iOS13期-OC基 础加强/PPTs/str1.txt"];
** 这种方式创建的NSURL对象, 默认就是读取本地文件的NSURL对象, 以"file://" 开头
2> 根据NSURL对象来读取文件内容。
* [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:
&err];
5> NSString的常见方法:
- (NSString *)uppercaseString; //全部字符转为大写字母
- (NSString *)lowercaseString //全部字符转为小写字母
- (NSString *)capitalizedString
//首字母变大写,其他字母都变小写。如果一个句子中有多个单词,那么会将每个单词的首字母 变成大写,其余字母变成小写
- (BOOL)isEqualToString:(NSString *)aString; //两个字符串的内容相同就返回YES, 否则返回NO
//注意: == 比较的是两个对象的地址是否相同, 不是字符串内容
- (NSComparisonResult)compare:(NSString *)string; 这个方法可以用来比较两个字符串内容的大小
//比较方法: 逐个字符地进行比较ASCII值,返回NSComparisonResult作为比较结果
NSComparisonResult是一个枚举,有3个值:
如果左侧 > 右侧,返回NSOrderedDescending,
如果左侧 < 右侧,返回NSOrderedAscending,
如果左侧 == 右侧返回NSOrderedSame
- (NSComparisonResult) caseInsensitiveCompare:(NSString *)string; 忽略大小写进行比较,返回值与compare:一致
- (BOOL)hasPrefix:(NSString *)aString; 是否以aStr
NSString的子类NSMutableString:可变字符串;
NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"]; // 拼接内容到s1的后面 [s1 appendString:@" 11 12"]; // 获取is的范围 NSRange range = [s1 rangeOfString:@"is"]; [s1 deleteCharactersInRange:range]; NSString *s2 = [NSString stringWithFormat:@"age is 10"]; //添加字符串到指定已有字符串 NSString *s3 = [s2 stringByAppendingString:@" 11 12"]; NSLog(@"s1=%@, s2=%@", s1, s2);
对比NSString:
都创建一个字符创
NSString *s1 = [NSString stringWithFormat:@“age is %d”,10];
NSMutableString *s2 = [NSMutableString stringWithFormat:@“age is %d”,10];
因为s1是固定不变的,所以s1一直是 age is 10;
而s2是可变的 所以我们可以在后面加字符创如:
[s2 appendString:@“11 12”];//这是个给字符串加字符的函数;
这样s2这个字符串就变成了 age is 10 11 12;
我们既然可以加字符 也可以删除字符 例如 :
[s2 deleteCharactersInRange:NSMakeRange(4,2)];//这是表示将一个范围的字符串删除;
经过上述操作之后,我们的age is 10 中的10就会被删除了;当然我们要准确的找出要删除的内容 我们通常还会用到一个
rangeOfString这个函数
1. NSRange range = [s2 rangeOfString :@“is”];这就表示获取字符串中is的范围;
2.[s2 deleteCharactersInRange:range];//删除is字符串;
NSArray:表示一个OC数组,是一个不可变数组
//NSArray的创建 NSArray *array1 = [NSArray arrayWithObject:@"jack"]; // nil是数组元素结束的标记 NSArray *array2 = [NSArray arrayWithObjects:@"jack", @"rose", nil]; //快速创建一个NSArray对象 NSArray *array4 = @[@"jack", @"rose", @"4324324"]; //NSArray的元素个数 NSLog(@"%ld", array3.count); //NSArray中元素的访问 NSLog(@"%@", [array3 objectAtIndex:1]); //快速访问 NSLog(@"%@", array3[0]); }
1.NSArray的创建:
NSArray *array1 = [NSArray arrayWithObject:@“jack” ,“rose”,nil;]//这就表示创建了一个OC数组 里面有一个元素jack
快速创建的方法:
NSArray *array2 = @[p,@“jack”]//p使我们创建的对象;
//nil是表示前面的是数组的元素作为结束标志;
2.NSArray的元素个数:
array.count == [array count];就像是调用方法;
NSArray中元素的访问:
跟c语言中的数组访问一样 array[0],表示第一个元素;
遍历数组:
1.for int i = 0 ;i<array.count;i++{
NSLog(@“%@”,array[i]);
}
2.for (id obj in array)
{
//找出obj元素在数组中的位置;
NSUIntege i= [array indexOfObject:obj];
NSLog(@“%ld - %@”,i,obj);
}
3.[array enumerateObjectsUsingBlock]:
^(id obj,NSUInteger idx,BOOL *stop)
{
NSLog(@“%ld - %@”,idx,obj);
}
NSMutableArray:NSArray的子类 是一个不可变数组
// @[] 只创建不可变数组NSArray // 常见错误写法 NSMutableArray *array = @[@"jack", @"rose"]; [array addObject:@"jim"];//因为快速创建的NSArrray是不可变的 // 可变数组的基本使用 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; // 添加元素 [array addObject:[[Person alloc] init]]; [array addObject:@"jack"]; // 删除元素 [array removeAllObjects]; // 删除指定的对象 [array removeObject:@"jack"]; [array removeObjectAtIndex:0]; // 错误写法 // [array addObject:nil]; //nil是NSArray的结束标志
NSDictionary:表示OC中的不可变字典:
//字典的定义 //NSDictionary定义一个键值对 NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]; //NSDictionary定义多个键值对 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"jack", @"name", @"北京", @"address", @"32423434", @"qq", nil]; //快速定义字典(只能用于不可变字典) NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"}; //字典的键值对获取 id obj = dict[@"name"];
NSMutableDictionary:NSDictionary的子类 是一个可变字典
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; // 添加键值对 [dict setObject:@"jack" forKey:@"name"]; [dict setObject:@"北京" forKey:@"address"]; // 移除键值对 [dict removeObjectForKey:(id)]; // 字典不允许有相同的key,但允许有相同的value(Object) // 字典的无序的 NSDictionary *dict = @{ @"address" : @"北京", @"name" : @"jack", @"name2" : @"jack", @"name3" : @"jack", @"qq" : @"7657567765"}; //打印所有的字典的键值对 [dict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { NSLog(@"%@ - %@", key, obj); // *stop = YES; }];
NSNumber
1.将各种基本数据类型包装成NSNumber对象.
// 将age变量包装成NSNumber对象 int age = 100; @(age); //[NSNumber numberWithInt:age]; //将基本数据类型包装成NSNumber对象 NSNumber *num = [NSNumber numberWithInt:10]; NSNumber *n = [NSNumber numberWithDouble:10.5];
2.将NSNumber对象转化成基本数据类型
//将NSNumber对象转为基本数据类型 //转为int int a = [number intValue]; //转为double double d = [number doubleValue];
3.将基本数据类型快速包装成NSNumber对象
// 将各种基本数据类型包装成NSNumber对象 @10.5; @YES; @'A'; // NSNumber对象 //注意@'A'和@"A"的区别 @"A"; // NSString对象
相关文章推荐
- c# 程序员学习android(1)引导界面--viewpager的使用
- 面试题54——表示数值的字符串
- 字符串面试题(一)字符串逆序
- 关于数组的几道面试题
- 程序员爱情文学
- 程序员爱情文学
- Android面试资料集锦
- 面试题整理:SQL(二)
- 简直offer-第四章解决面试题思路(二叉树中和为某一值的路径)
- 程序员常去的顶级开发社区
- 海量数据处理:十道面试题与十个海量数据处理方法总结
- OSChina 周三乱弹 —— 给程序员的一副对联
- 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】
- 【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】
- 【LeetCode-面试算法经典-Java实现】【143-Copy List with Random Pointer(有随机指针的链表复制)】
- 【LeetCode-面试算法经典-Java实现】【142-Linked List Cycle II(单链表中有环II)】
- 【LeetCode-面试算法经典-Java实现】【141-Linked List Cycle(单链表中有环)】
- 【LeetCode-面试算法经典-Java实现】【139-Word Break(单词拆分)】
- 黑马程序员——黑苹果的日记(8)——oc基础之类和对象
- 黑马程序员——黑苹果的日记(11)—— oc加强