Foundation框架介绍
1.什么是框架
由许多的类、方法、函数、文档按照一定的逻辑组织起来的集合,以便是程序开发变得更容易。在OS X下的MAC
操作系统中大约有80个框架为所有的程序开发奠定基础的框架称为Foundation框架。
Foundation框架允许使用一些基本对象,如数字,字符串,以及协议对象的集合,如数组,字典和集合。其他
功能包括处理日期时间,内存管理,处理文件系统,存储(或递归)对象,处理几何数据结构
Cocoa框架是Foundation框架和APPKit(应用开发数据包,例如地图)框架的集合
Cocoa Touch框架是Foundation框架和UIKit(UO设计工具包)框架几何
Foundation框架大概有125个可用的头文件,作为一个简单是形式,可以使用下面语句导入:
#import <Foundation/Foundation.h>。因为Foundation.h文件实际上导入其他所有的Foundation框架中的头文件
2.Foundation框架的作用
(1)Foundation框架是Mac\IOS其他框架的基础
(2)Foundation框架包含了很多开发中常用的数据类型:结构体、枚举、类
3.不小心修改了系统自带的头文件,比如NSString.h,会报错、解决方案是删除Ccode缓存:
/Users/用户名/Library/Developer/Xcode/DeriveData
其中Library文件夹有可能是隐藏的,需要通过以下命令修改:
显示隐藏文件:defaults write com.apple.finder AppleShowAllFiles - bool true
隐藏隐藏文件:defaults write com.apple.finder AppleSshowAllFiles - bool false
指令输入完成后,请重新启动Finder
NSString字符串比较
1.字符串比较函数
1)比较字符串的大小-----compare方法,compare返回结果三种
str > str2 NSOrderedDescending 1
str < str2 NSOrderedAscending -1
str = str2 NSOrderedSame 0
例子:
NSComparisonResult result = [str compare:str2];
可以设置比较条件:
NSComparisonResult result = [str compare:str2 options:NSCaseInsensitiveSearch];//比较的时候不区分大小写
NSComparisonResult result = [str compare:str2 options:NSCaseInsensitiveSearch | NSNumericSearch];//比较的时候,
既不区分大小写,同时又要比较字符个数
还有一个参数NSLiteralSearch:进行完全比较,区分大小写,这也是默认情况下的方式。
2)判断字符串是否相等
==不能够判断字符串相等
NSString *str1 = @”abc“;//地址在常量区
NSString *str2 = @”abc“;//地址在常量区
NSString *str3 = [NSString stringWithoutFormat:@"abc"];//地址在堆区
if(str1 == str2)//比较后结果是1,因为str1和str2比较的是地址,而在常量区同样的变量只保存一份,故而两者相同
NSLog(@"1");
else
NSLog(@"0");
if(str1 == str3)//比较结果为0,因为地址不相同
NSLog(@"1");
else
NSLog(@"0");
故这种比较方法是错误的。正确的比较方法如下:
//使用isEqualToString,该方法的返回值为bool类型YES和NO。该方法是区分大小写的。
if([str1 isEqualToString:str3])
2.NSString的前后缀检查及搜索
1)NSString的前后缀检查hasPrefix/hasSuffix
检测前缀:
NSString *url = @"http://www.baidu.com";
检查输入的是不是一个网址(及是否以http开头或者https开头)
if([url hasPrefix:@"http://"] || [url hasPrefix:@"http://"]){
NSLog(@"是一个网址")
}
else{
NSLog(@"不是一个网址");
}
检测后缀:
判断是不是一个图片
NSString *imgName = @"xxxxx.jpg";
if([imgName hasSuffix:@".jpg"]){
NSLlog(@"是一张图片");
}
else{
NSLog(@"不是一张图片");
}
2)字符串查找(某个字符串是否包含在另一个字符串中,存在于另一个字符串中的位置),
str1 rangofString str2;//查找str2在str1中首次出现的位置,location+length.
NSString * str1 = @"asdfqwezxcasdqwe";
NSString * str2 = @"qwe";
NSRange range = [str1 rangeofString:str2];
if(range.location != NSNotFound){//如果没有查找到,返回值为long类型的最大整型数。
NSLog(@"%lu,%lu",range.location,range.length);
}
else{
NSLog(@"没有找到字符串");
}
3.NSString的其他用法
(1)获取字符串的每个字符
[str characterAtIndex:i];
(2)字符串和其他字符串的转换问题
字符串转各种数值
NSString *str = @"1";
NSString *str1 = @"3.14";
int b = [str intValue];
float a = [str1 floatValue];
OC的字符串和C的字符串的相互转换
C字符串转化为OC思路:
1)用C创建一个C语言字符串
2)将C创建的C字符串转化为OC中的字符串对象
char *s = "zhangsanfeng";
printf("%s",s);
NSString *str =[NSString stringWithUTF8String:s];
NSLog(@"str = %@",str);
OC字符串转换为C字符串
NSString *str = @"zbz";
const char *s1 = [str UTF8String];
NSRange的使用
1.NSRange是Foundation框架中比较常用的结构体,他在框架中的定义:
typedef struct _NSRange{
NSUInteger location;
NSUInteger length;
}NSRange;//NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围
例子:”I love IOS“中的IOS可以用location 7和length 3表示
2.NSRange创建的几种方式
(1)通过结构体变量访问成员:
NSRange range;//声明一个结构体变量
range.location = 7;//结构体变量赋值
range.length = 3;//结构体变量赋值
(2)通过结构体变量整体赋值
NSRange range;//声明一个结构体变量
range = (NSRange){5,3};
(3)声明变量的时候直接赋值
NSRange r3 = {5,3};
NSRange r4 = {.location = 3};只给结构体中的一个变量赋值
(4)OC中新增的方法
NSRange r5 = NSMakeRange(3,3);
查看结构体变量的值:
NSLog(@"%ld,%ld",r4.location, r4.length);
可以把结构体变量转换为NSString类型
NSLog(@"%@",NSStringFromRange(str4));
字符串的截取和替换
1.字符串的截取
(1)substringFromIndex-------从xx位置开始,到最后结束
NSString *str1 = @''http://www.baidu.com";
NSString *str = [str substringFromIndex:5];//从第五个位置开始往后截取,第五位置之前的全部去掉,
//只保留第五个及其后面的字符
(2)substringToIndex------从开始位置开始截取,到XX位置结束
NSString *str1 = @''http://www.baidu.com";
NSString *str = [str substringToIndex:5];//第五位及第五位之后的字符都被丢弃
(3)substringWithRange截取一个范围
NSRange r1 = {3,4};
NSString *str1 = @''http://www.baidu.com";
NSString *str3 = [str substringWithRange:r1];//从第三个位置开始,截取四个,包括第三个位置
练习:取中间字符
NSString * str = @"<itcast>传智播客</itcast>";
(1)取">"的第一个位置+1
NSUInteger loc1 = [str rangeofString:@">"].location +1;
(2)取"<"的第一个位置
NSUInteger loc2 = [str rangeofString:@"<"].location;
(3)求要截取字符的长度
int len = loc2 - loc1;
(4)构建range
NSRange r2 = {loc1,len};
(5)截取
NSString *sunStr = [str substringWithRange:r2];
2.字符串的替换(关键字stringByReplacingOccurrencesOfString)
-(NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *) replacement;
//上面用replacement 替换target
例:[str stringByReplacingOccurrencesOfString:@"a" withString:@"*"]//将字符串中的a全部用*替换
NSMutableString
1.NSMutableString介绍和使用
NSMutableString继承自NSString,他更加灵活。
NSMutableString和NSString的区别:
(1)NSString里面的文字内容是不可变的,而NSMutableString里面的参数是可变的
//不可变:指的是字符串在内存中的存储空间固定,并且存储的内容不能发生变化
//可变:指的是字符串在内容中占用的存储空间不固定,并且存储的内容可以被修改
(2)使用例子
#import <Foundation/Foundation.h>
int main(int argc, const char *argv[]){
autoreleasepool{
NSString *str = @"Jack";//字符串常量在常量区
NSLog(@"str addr = %p",str);//在内存中的位置是A
str = @"Rose";
NSLog(@"str addr = %p",str);//在内存中的位置是B
NSMutableString *str2 = [NSMutableString stringWithFormat:@"Jack"];//在堆区
NSLog(@"str addr = %p",str2);//内存空间为C,在堆区
[str2 appendString:@"Rose"];
NSLog(@"str addr = %p",str2)//内存空间为C,在堆区
NSLog(@"str addr = %@",str2);//结果是“Jack@Rose”;
//创建一个可变的空字符
NSMutableString *str3 = [NSMutableString string];
for(int i; i < 10; i++){
[str3 appendString:@"itcast"];
}
}
return 0;
}
2.NSMutableString的常用方法
(1)appendString
(2)appendFormat//格式化的添加字符串
NSMutableString *str = [NSMutableString string];
[str appendFormat:@"http://www.baidu.com/%d",100];
NSLog(@"%@",str);//输出"http://www.baidu.com/100"
(3)deleteCharactersInRange//在字符串的指定位置删除字符串的一部分内容
NSMutableString *str = [NSMutableString string];
[str appendFormat:@"http://www.baidu.com/%d",100];
NSLog(@"%@",str);
[str deleteCharactersInRange:NSMakeRange(3,4)]//从第三个位置开始,往后删4个。并且返回值为0,
//因为该方法将已存在的内存缩小,地址没有改变
(4)insertString//没有返回值
NSMutableString *str = [NSMutableString string];
[str appendFormat:@"http://www.baidu.com/%d",100];
NSLog(@"%@",str);
[str deleteCharactersInRange:NSMakeRange(3,4)]
[str insertString:@"p://" atIndex:3];//在位置3之前插入
(5)replaceCharactersInRange
[str replaceCharatersInRange:NSMakeRange(11,5) wtithString:@"itcast"];
3.注意事项
(1)给可变字符串赋值了不可变的值,导致程序运行时出错
NSMutableString *str = @"abc";//@“abc”是NSString类型,而str是NSMutableString类型
//编译的时候,str认为自己是NSMutableString类型,不会报错
//但是动态类型只有在运行的时候,才会确定自己是什么类型,也就是说
//运行的时候,判断自己为NSString类型
[str appendString:@"xxxx"];
(2)NSMutableString中string属性,该属性可以将原来的字符串覆盖。
str.string = @" ";以空格覆盖
(3)开发中是使用NSString还是使用NSMutableString
绝大多数情况下,使用NSString,在需要对字符串的内容进行操作的时候,使用NSMutableString
(4)位枚举
NSArray//OC中提供数组的一个类
1.NSArray基础
(1)开发中尽量使用NSArray,因为C中的数据只能存放一种类型的数据,不能很方便的动态添加元素、不能很方便的
动态删除数组元素
(2)只能存放对象,并且下标有序
不能存储非OC对象,如int\float\double\char\enum\struct等
它是不可变的,一旦初始化完毕,它里面的内容是固定的,不可修删改
2.NSArray的创建方式
(1)NSArray的类方法创建
3.NSArray的常见用法
(1)-(NSRUInteger)count方法-----获取当前数组的长度
(2)-(id)objectAtIndex:(NSUInteger)index------获取index位置的元素
(3)-(BOOL)containsObject:(id)anObject--------数组中是否包含某个对象
(4)-(id)lastObject-------返回最后一个元素
(5)-(id)firstObject-------返回第一个元素
(6)-(NSUInteger)indexofbject:(id)anobject-----查找anobject元素在数组中的位置,如果找不到,返回-1(NSNotFound)
(7)-(NSUInteger)indexofobject:(id)anobject inRange:(NSRange)range;----在range范围内查找anobject元素在数组中的位置
4.NSArray的遍历方法
(1)NSArrya下标遍历
NSArray *arr = @[@"one",@"two",@"three",@"four"];
for(int i=0;i<arr.count;i++){
NSLog(@"->%@",arr[i]);
}
(2)快速枚举法(for循环的增强方式forin)
for(NSString * int arr){
NSLog(@"->%@",arr);
}
(3)使用block方法进行访问
[arr enumerate3objectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop){
if(idx ==2){
*stop = YES;
}
else{
NSLog(@"idx = %ld,obj = %@",idx,obj);
}
}];
5.NSSArray和字符串之间的关系
1.把数组元素连成一个字符串
NSArray *arr = @[@1,@2,@3,@4];
NSString *str = [arr componentsJoineByString:@"-"];
2.把字符串分成若干个元素,并依次存放进入数组中
NSString *str2 = @"400-800-1258";
NSArray *arr2 = [str2 compontsSepatatedBystring:@"-"]
str2 = @"400-800-1258#400-800-1257";
NSArray *arr3 = [str2 componentsSeparatedByString:@"#"];
NSArry *arr4 = [arr3 fistObject] componentsSeparatedByString:@"--"]
NSArry *arr5 = [arr3 lastObject] componentsSeparatedByString:@"--"]
NSMutableArray及基本使用
1.基本使用
NSArray初始化之后,内容永远固定,NSMutableArray可以改变
(1)创建
//创建空数组
NSMutableArray *arr1 = [NSMutableArray array];
//创建的时候初始化一个元素
NSMutableArray *arr2 = [NSMutableArray arrayWithObject:@"one"];
//创建的时候,初始化多个元素
NSMutableArray *arr3 = [NSMutableArray arrayWithObject:@"one",@3];
//创建一个数组,并且指定其长度(该长度随着数组元素的增加是可以改变的)
NSMutableArray *arr3 = [NSMutableArray arrayWithCapacity:5];
(2)添加元素
[arr1 addObject:@"fengjie"];
还可以添加整个数组
-(void)addObjectsFormArdObray:(NSArray *)array;
在指定位置插入元素
[arr1 inserObject:@"zbz" atIndex:0];
(3)删除元素
根据对象删除
[arr1 removeObject:@"zbz"];
根据位置删除
[arr1 removeObjectAtIdex:1];
全部删除
[arr1 removeAllObjects];
(4)修改元素
[arr3 replaceObjectAtIndex:1 withOvject:@"four"];
(5)查找元素
BOOL isSearch = [arr3 containObject:@"four"];
(6)元素交换
[arr3 exchangeObjectAtIndex:0 withObjectAtIndex:4];
2.错误的使用
NSMutableArray *array =@ [@"bob",@"steve",@"john"];//后面是给不可变量赋值的。
NSDictionary
1.基本知识
NSDictionary的意思是字典。
NSDictionary的作用类似:通过一个key值,能找到对应的value
NSDictionary是不可变的,一旦初始化完毕,不可修改
字典的key值和value值都是对象
2.创建
//创建空字典
NSDictionary *dict1 = [NSDictional dictionary];
由于NSDictionary是不可变的,一旦创建不能改动,所以这样写没有意义
//创建只有一组键值对的字典
NDSictionary *dict2 = [NSDictionary dictionaryWithObject:@"zhangsan" forkey:@"zs"];
//创建多组键值对的字典
NDSictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan" forkey:@"zs",@"lisi",@"k2",nil];//成对
出现,前面是value值,后面是key值。
NSLog(@"%@",dict2);//输出结果包含扎起大括号里
//快速创建字典
NDSictionary *dict4 = @{@"k1":@"a", @"k2":@"b", @"k3":@"c"};
3.键值对集合的特点
(1)字典存储的时候,必须是以"键值对"的方式来存储,并且key值不能重复,如果重复了,后面添加的无法加入字典
(2)键值对中存储的数据是无序的
(3)键值对集合可以根据键值快速获取数据
4.NSDictionary基本用法
(1) -(NSUInteger)count------------返回字典的键值对数目
NSLog(@"%lu",dict.count);
(2) -(id)objectForKey:(id)akey-----------根据key值获得value值
NSString *str = [dict objectForKey:@"k1"];
5.字典的遍历
//获取所有的key
//根据key获取value
方法一:
for(NSString*key in dict){
NSLog(@"key = %@,value=%@",key,[dict objectForKey:key]);
}
方法二:
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
NSLog(@"%@--->%@",key,ogj);
}]
6.NSDictionary的简写及文件操作
(1)创建的简写
一般写法[NSDictionary dictionaryWithObjectsAndKeys:@"Jack",@"男",@“sex”,nil];
简写:@[@"Jack",@"男",@“sex”];
(2)获取元素
之前写法:[dict objectForKey:@"name"];
现在:dict[@"k1"];
7.NSDictionary的文件操作//把字典保存在文件中
BOOL isWrite = [dict writeToFile:@"/Users/dict.plist" atomically:YES];
is(isWrite){
NSLog(@"写入成功");
}
//从文件中读取字典
NSDictionary *readDict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/zhuhouli.plist"];
NSLog(@"readDict = %@",readDict);
1.什么是框架
由许多的类、方法、函数、文档按照一定的逻辑组织起来的集合,以便是程序开发变得更容易。在OS X下的MAC
操作系统中大约有80个框架为所有的程序开发奠定基础的框架称为Foundation框架。
Foundation框架允许使用一些基本对象,如数字,字符串,以及协议对象的集合,如数组,字典和集合。其他
功能包括处理日期时间,内存管理,处理文件系统,存储(或递归)对象,处理几何数据结构
Cocoa框架是Foundation框架和APPKit(应用开发数据包,例如地图)框架的集合
Cocoa Touch框架是Foundation框架和UIKit(UO设计工具包)框架几何
Foundation框架大概有125个可用的头文件,作为一个简单是形式,可以使用下面语句导入:
#import <Foundation/Foundation.h>。因为Foundation.h文件实际上导入其他所有的Foundation框架中的头文件
2.Foundation框架的作用
(1)Foundation框架是Mac\IOS其他框架的基础
(2)Foundation框架包含了很多开发中常用的数据类型:结构体、枚举、类
3.不小心修改了系统自带的头文件,比如NSString.h,会报错、解决方案是删除Ccode缓存:
/Users/用户名/Library/Developer/Xcode/DeriveData
其中Library文件夹有可能是隐藏的,需要通过以下命令修改:
显示隐藏文件:defaults write com.apple.finder AppleShowAllFiles - bool true
隐藏隐藏文件:defaults write com.apple.finder AppleSshowAllFiles - bool false
指令输入完成后,请重新启动Finder
NSString字符串比较
1.字符串比较函数
1)比较字符串的大小-----compare方法,compare返回结果三种
str > str2 NSOrderedDescending 1
str < str2 NSOrderedAscending -1
str = str2 NSOrderedSame 0
例子:
NSComparisonResult result = [str compare:str2];
可以设置比较条件:
NSComparisonResult result = [str compare:str2 options:NSCaseInsensitiveSearch];//比较的时候不区分大小写
NSComparisonResult result = [str compare:str2 options:NSCaseInsensitiveSearch | NSNumericSearch];//比较的时候,
既不区分大小写,同时又要比较字符个数
还有一个参数NSLiteralSearch:进行完全比较,区分大小写,这也是默认情况下的方式。
2)判断字符串是否相等
==不能够判断字符串相等
NSString *str1 = @”abc“;//地址在常量区
NSString *str2 = @”abc“;//地址在常量区
NSString *str3 = [NSString stringWithoutFormat:@"abc"];//地址在堆区
if(str1 == str2)//比较后结果是1,因为str1和str2比较的是地址,而在常量区同样的变量只保存一份,故而两者相同
NSLog(@"1");
else
NSLog(@"0");
if(str1 == str3)//比较结果为0,因为地址不相同
NSLog(@"1");
else
NSLog(@"0");
故这种比较方法是错误的。正确的比较方法如下:
//使用isEqualToString,该方法的返回值为bool类型YES和NO。该方法是区分大小写的。
if([str1 isEqualToString:str3])
2.NSString的前后缀检查及搜索
1)NSString的前后缀检查hasPrefix/hasSuffix
检测前缀:
NSString *url = @"http://www.baidu.com";
检查输入的是不是一个网址(及是否以http开头或者https开头)
if([url hasPrefix:@"http://"] || [url hasPrefix:@"http://"]){
NSLog(@"是一个网址")
}
else{
NSLog(@"不是一个网址");
}
检测后缀:
判断是不是一个图片
NSString *imgName = @"xxxxx.jpg";
if([imgName hasSuffix:@".jpg"]){
NSLlog(@"是一张图片");
}
else{
NSLog(@"不是一张图片");
}
2)字符串查找(某个字符串是否包含在另一个字符串中,存在于另一个字符串中的位置),
str1 rangofString str2;//查找str2在str1中首次出现的位置,location+length.
NSString * str1 = @"asdfqwezxcasdqwe";
NSString * str2 = @"qwe";
NSRange range = [str1 rangeofString:str2];
if(range.location != NSNotFound){//如果没有查找到,返回值为long类型的最大整型数。
NSLog(@"%lu,%lu",range.location,range.length);
}
else{
NSLog(@"没有找到字符串");
}
3.NSString的其他用法
(1)获取字符串的每个字符
[str characterAtIndex:i];
(2)字符串和其他字符串的转换问题
字符串转各种数值
NSString *str = @"1";
NSString *str1 = @"3.14";
int b = [str intValue];
float a = [str1 floatValue];
OC的字符串和C的字符串的相互转换
C字符串转化为OC思路:
1)用C创建一个C语言字符串
2)将C创建的C字符串转化为OC中的字符串对象
char *s = "zhangsanfeng";
printf("%s",s);
NSString *str =[NSString stringWithUTF8String:s];
NSLog(@"str = %@",str);
OC字符串转换为C字符串
NSString *str = @"zbz";
const char *s1 = [str UTF8String];
NSRange的使用
1.NSRange是Foundation框架中比较常用的结构体,他在框架中的定义:
typedef struct _NSRange{
NSUInteger location;
NSUInteger length;
}NSRange;//NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围
例子:”I love IOS“中的IOS可以用location 7和length 3表示
2.NSRange创建的几种方式
(1)通过结构体变量访问成员:
NSRange range;//声明一个结构体变量
range.location = 7;//结构体变量赋值
range.length = 3;//结构体变量赋值
(2)通过结构体变量整体赋值
NSRange range;//声明一个结构体变量
range = (NSRange){5,3};
(3)声明变量的时候直接赋值
NSRange r3 = {5,3};
NSRange r4 = {.location = 3};只给结构体中的一个变量赋值
(4)OC中新增的方法
NSRange r5 = NSMakeRange(3,3);
查看结构体变量的值:
NSLog(@"%ld,%ld",r4.location, r4.length);
可以把结构体变量转换为NSString类型
NSLog(@"%@",NSStringFromRange(str4));
字符串的截取和替换
1.字符串的截取
(1)substringFromIndex-------从xx位置开始,到最后结束
NSString *str1 = @''http://www.baidu.com";
NSString *str = [str substringFromIndex:5];//从第五个位置开始往后截取,第五位置之前的全部去掉,
//只保留第五个及其后面的字符
(2)substringToIndex------从开始位置开始截取,到XX位置结束
NSString *str1 = @''http://www.baidu.com";
NSString *str = [str substringToIndex:5];//第五位及第五位之后的字符都被丢弃
(3)substringWithRange截取一个范围
NSRange r1 = {3,4};
NSString *str1 = @''http://www.baidu.com";
NSString *str3 = [str substringWithRange:r1];//从第三个位置开始,截取四个,包括第三个位置
练习:取中间字符
NSString * str = @"<itcast>传智播客</itcast>";
(1)取">"的第一个位置+1
NSUInteger loc1 = [str rangeofString:@">"].location +1;
(2)取"<"的第一个位置
NSUInteger loc2 = [str rangeofString:@"<"].location;
(3)求要截取字符的长度
int len = loc2 - loc1;
(4)构建range
NSRange r2 = {loc1,len};
(5)截取
NSString *sunStr = [str substringWithRange:r2];
2.字符串的替换(关键字stringByReplacingOccurrencesOfString)
-(NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *) replacement;
//上面用replacement 替换target
例:[str stringByReplacingOccurrencesOfString:@"a" withString:@"*"]//将字符串中的a全部用*替换
NSMutableString
1.NSMutableString介绍和使用
NSMutableString继承自NSString,他更加灵活。
NSMutableString和NSString的区别:
(1)NSString里面的文字内容是不可变的,而NSMutableString里面的参数是可变的
//不可变:指的是字符串在内存中的存储空间固定,并且存储的内容不能发生变化
//可变:指的是字符串在内容中占用的存储空间不固定,并且存储的内容可以被修改
(2)使用例子
#import <Foundation/Foundation.h>
int main(int argc, const char *argv[]){
autoreleasepool{
NSString *str = @"Jack";//字符串常量在常量区
NSLog(@"str addr = %p",str);//在内存中的位置是A
str = @"Rose";
NSLog(@"str addr = %p",str);//在内存中的位置是B
NSMutableString *str2 = [NSMutableString stringWithFormat:@"Jack"];//在堆区
NSLog(@"str addr = %p",str2);//内存空间为C,在堆区
[str2 appendString:@"Rose"];
NSLog(@"str addr = %p",str2)//内存空间为C,在堆区
NSLog(@"str addr = %@",str2);//结果是“Jack@Rose”;
//创建一个可变的空字符
NSMutableString *str3 = [NSMutableString string];
for(int i; i < 10; i++){
[str3 appendString:@"itcast"];
}
}
return 0;
}
2.NSMutableString的常用方法
(1)appendString
(2)appendFormat//格式化的添加字符串
NSMutableString *str = [NSMutableString string];
[str appendFormat:@"http://www.baidu.com/%d",100];
NSLog(@"%@",str);//输出"http://www.baidu.com/100"
(3)deleteCharactersInRange//在字符串的指定位置删除字符串的一部分内容
NSMutableString *str = [NSMutableString string];
[str appendFormat:@"http://www.baidu.com/%d",100];
NSLog(@"%@",str);
[str deleteCharactersInRange:NSMakeRange(3,4)]//从第三个位置开始,往后删4个。并且返回值为0,
//因为该方法将已存在的内存缩小,地址没有改变
(4)insertString//没有返回值
NSMutableString *str = [NSMutableString string];
[str appendFormat:@"http://www.baidu.com/%d",100];
NSLog(@"%@",str);
[str deleteCharactersInRange:NSMakeRange(3,4)]
[str insertString:@"p://" atIndex:3];//在位置3之前插入
(5)replaceCharactersInRange
[str replaceCharatersInRange:NSMakeRange(11,5) wtithString:@"itcast"];
3.注意事项
(1)给可变字符串赋值了不可变的值,导致程序运行时出错
NSMutableString *str = @"abc";//@“abc”是NSString类型,而str是NSMutableString类型
//编译的时候,str认为自己是NSMutableString类型,不会报错
//但是动态类型只有在运行的时候,才会确定自己是什么类型,也就是说
//运行的时候,判断自己为NSString类型
[str appendString:@"xxxx"];
(2)NSMutableString中string属性,该属性可以将原来的字符串覆盖。
str.string = @" ";以空格覆盖
(3)开发中是使用NSString还是使用NSMutableString
绝大多数情况下,使用NSString,在需要对字符串的内容进行操作的时候,使用NSMutableString
(4)位枚举
NSArray//OC中提供数组的一个类
1.NSArray基础
(1)开发中尽量使用NSArray,因为C中的数据只能存放一种类型的数据,不能很方便的动态添加元素、不能很方便的
动态删除数组元素
(2)只能存放对象,并且下标有序
不能存储非OC对象,如int\float\double\char\enum\struct等
它是不可变的,一旦初始化完毕,它里面的内容是固定的,不可修删改
2.NSArray的创建方式
(1)NSArray的类方法创建
3.NSArray的常见用法
(1)-(NSRUInteger)count方法-----获取当前数组的长度
(2)-(id)objectAtIndex:(NSUInteger)index------获取index位置的元素
(3)-(BOOL)containsObject:(id)anObject--------数组中是否包含某个对象
(4)-(id)lastObject-------返回最后一个元素
(5)-(id)firstObject-------返回第一个元素
(6)-(NSUInteger)indexofbject:(id)anobject-----查找anobject元素在数组中的位置,如果找不到,返回-1(NSNotFound)
(7)-(NSUInteger)indexofobject:(id)anobject inRange:(NSRange)range;----在range范围内查找anobject元素在数组中的位置
4.NSArray的遍历方法
(1)NSArrya下标遍历
NSArray *arr = @[@"one",@"two",@"three",@"four"];
for(int i=0;i<arr.count;i++){
NSLog(@"->%@",arr[i]);
}
(2)快速枚举法(for循环的增强方式forin)
for(NSString * int arr){
NSLog(@"->%@",arr);
}
(3)使用block方法进行访问
[arr enumerate3objectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop){
if(idx ==2){
*stop = YES;
}
else{
NSLog(@"idx = %ld,obj = %@",idx,obj);
}
}];
5.NSSArray和字符串之间的关系
1.把数组元素连成一个字符串
NSArray *arr = @[@1,@2,@3,@4];
NSString *str = [arr componentsJoineByString:@"-"];
2.把字符串分成若干个元素,并依次存放进入数组中
NSString *str2 = @"400-800-1258";
NSArray *arr2 = [str2 compontsSepatatedBystring:@"-"]
str2 = @"400-800-1258#400-800-1257";
NSArray *arr3 = [str2 componentsSeparatedByString:@"#"];
NSArry *arr4 = [arr3 fistObject] componentsSeparatedByString:@"--"]
NSArry *arr5 = [arr3 lastObject] componentsSeparatedByString:@"--"]
NSMutableArray及基本使用
1.基本使用
NSArray初始化之后,内容永远固定,NSMutableArray可以改变
(1)创建
//创建空数组
NSMutableArray *arr1 = [NSMutableArray array];
//创建的时候初始化一个元素
NSMutableArray *arr2 = [NSMutableArray arrayWithObject:@"one"];
//创建的时候,初始化多个元素
NSMutableArray *arr3 = [NSMutableArray arrayWithObject:@"one",@3];
//创建一个数组,并且指定其长度(该长度随着数组元素的增加是可以改变的)
NSMutableArray *arr3 = [NSMutableArray arrayWithCapacity:5];
(2)添加元素
[arr1 addObject:@"fengjie"];
还可以添加整个数组
-(void)addObjectsFormArdObray:(NSArray *)array;
在指定位置插入元素
[arr1 inserObject:@"zbz" atIndex:0];
(3)删除元素
根据对象删除
[arr1 removeObject:@"zbz"];
根据位置删除
[arr1 removeObjectAtIdex:1];
全部删除
[arr1 removeAllObjects];
(4)修改元素
[arr3 replaceObjectAtIndex:1 withOvject:@"four"];
(5)查找元素
BOOL isSearch = [arr3 containObject:@"four"];
(6)元素交换
[arr3 exchangeObjectAtIndex:0 withObjectAtIndex:4];
2.错误的使用
NSMutableArray *array =@ [@"bob",@"steve",@"john"];//后面是给不可变量赋值的。
NSDictionary
1.基本知识
NSDictionary的意思是字典。
NSDictionary的作用类似:通过一个key值,能找到对应的value
NSDictionary是不可变的,一旦初始化完毕,不可修改
字典的key值和value值都是对象
2.创建
//创建空字典
NSDictionary *dict1 = [NSDictional dictionary];
由于NSDictionary是不可变的,一旦创建不能改动,所以这样写没有意义
//创建只有一组键值对的字典
NDSictionary *dict2 = [NSDictionary dictionaryWithObject:@"zhangsan" forkey:@"zs"];
//创建多组键值对的字典
NDSictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan" forkey:@"zs",@"lisi",@"k2",nil];//成对
出现,前面是value值,后面是key值。
NSLog(@"%@",dict2);//输出结果包含扎起大括号里
//快速创建字典
NDSictionary *dict4 = @{@"k1":@"a", @"k2":@"b", @"k3":@"c"};
3.键值对集合的特点
(1)字典存储的时候,必须是以"键值对"的方式来存储,并且key值不能重复,如果重复了,后面添加的无法加入字典
(2)键值对中存储的数据是无序的
(3)键值对集合可以根据键值快速获取数据
4.NSDictionary基本用法
(1) -(NSUInteger)count------------返回字典的键值对数目
NSLog(@"%lu",dict.count);
(2) -(id)objectForKey:(id)akey-----------根据key值获得value值
NSString *str = [dict objectForKey:@"k1"];
5.字典的遍历
//获取所有的key
//根据key获取value
方法一:
for(NSString*key in dict){
NSLog(@"key = %@,value=%@",key,[dict objectForKey:key]);
}
方法二:
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
NSLog(@"%@--->%@",key,ogj);
}]
6.NSDictionary的简写及文件操作
(1)创建的简写
一般写法[NSDictionary dictionaryWithObjectsAndKeys:@"Jack",@"男",@“sex”,nil];
简写:@[@"Jack",@"男",@“sex”];
(2)获取元素
之前写法:[dict objectForKey:@"name"];
现在:dict[@"k1"];
7.NSDictionary的文件操作//把字典保存在文件中
BOOL isWrite = [dict writeToFile:@"/Users/dict.plist" atomically:YES];
is(isWrite){
NSLog(@"写入成功");
}
//从文件中读取字典
NSDictionary *readDict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/zhuhouli.plist"];
NSLog(@"readDict = %@",readDict);