Foundation框架
1.框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便使研发程序变的更容易
清除缓存,删除这个文件夹下的所有文件/Users/fanyafang/Library/Developer/Xcode/DerivedData
显示隐藏文件:defaults write com.apple.finder AppleShowAllFiles -bool true
隐藏隐藏文件:defaults write com.apple.finder AppleShowAllFiles -bool false
2.NSURL与NSString
url统一资源定位符
//1.将字符串写入文件 NSString *str11=@"ssad"; NSError *err; [str11 writeToFile:@"/Users/fanyafang/Desktop/str.txt" atomically:YES encoding:NSUTF8StringEncoding error:&err]; if(err!=nil){ NSLog(@"写入失败!%@",err); }else{ NSLog(@"写入成功!"); } //2.读取文件到字符串 NSString *str22=[NSString stringWithContentsOfFile:@"/Users/fanyafang/Desktop/str.txt" encoding:NSUTF8StringEncoding error:&err]; if(err!=nil){ NSLog(@"读取失败!%@",err); }else{ NSLog(@"读取成功!"); NSLog(@"%@",str22); } //3.写入url,本地路径加file:// NSURL *url=[NSURL URLWithString:@"file:///Users/fanyafang/Desktop/str1.txt"]; if([str11 writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:&err]){ NSLog(@"写入成功url"); } //4.读取url NSString *str33=[NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"%@",str33);
3.NSString
compare:字符串比较
位枚举,枚举值是2的次方,不使用的时候赋0
[str1 compare:str2 options:(NSCaseInsensitiveSearch,NSNumericSearch)];
NSString *str1=@"abcd"; NSString *str2=@"abc"; NSComparisonResult s=[str1 compare:str2 options:(NSCaseInsensitiveSearch,NSNumericSearch)]; switch (s) { case NSOrderedAscending: NSLog(@"升序!"); break; case NSOrderedSame: NSLog(@"一样!"); break; case NSOrderedDescending: NSLog(@"降序!"); break; default: break; }
isEqualToString:字符串比较
if ([str1 isEqualToString:str2]) { NSLog(@"相等"); }else{ NSLog(@"不相等"); }
hasPrefix:是否包含前缀
hasSuffix:是否包含后缀
[str1 hasPrefix:@"sss"];//返回BOOL [str1 hasSuffix:@".jpg"];//返回BOOL
rangeOfString:字符串1中是否包含字符串2,返回结构体类型
NSMarkRange()可以给NSRange类型的结构体变量赋值
NSStringFromRange()把range转换正NSString
NSRange range=[str1 rangeOfString:str2]; if(range.location!=NSNotFound){ //没有找到 }else{ //找到了 //range.location首次出现的位置 //range.length长度 }
substringFromIndex:从什么位置开始截取字符串
substringToIndex:从开始位置到什么位置截取
substringWithRange:截取一个范围
NSString *str3=@"ssadsadsadsaqqee"; NSLog(@"%@",[str3 substringFromIndex:3]);//从什么位置开始到结束 NSLog(@"%@",[str3 substringToIndex:3]);//从开始到什么位置结束 NSRange r1={3,4}; NSLog(@"%@",[str3 substringWithRange:r1]);//截取一个范围
stringByReplacingOccurrencesOfString:替换
NSString * str4=[str3 stringByReplacingOccurrencesOfString:@"a" withString:@"#"]; NSLog(@"%@",str4);
length获取字符串的长度
characterAtIndex获取某个位置的字符
NSUInteger u=str3.length; NSLog(@"%u",u); unichar ch= [str3 characterAtIndex:3]; NSLog(@"%c",ch);
intValue:字符串转int
floatValue:字符串转float
doubleValue:字符串转double
NSString *str5=@"3"; NSLog(@"%d",[str5 intValue]); NSLog(@"%f",[str5 floatValue]); NSLog(@"%f",[str5 doubleValue]);
stringWithUTF8String用C的字符串创建OC的字符串
UTF8String:OC字符串转成C的字符串
char *str6="aasdaf"; //用C语言的对象创建OC的字符串 NSString *str7= [NSString stringWithUTF8String:str6]; char *str8=[str7 UTF8String]; printf("%s",str8);
2.NSMutableString
NSMutableString *strring=[NSMutableString stringWithFormat:@"Jack"]; //NSMutableString *strring=[NSMutableString string]; [strring appendFormat:@"itcast"];//追加 NSLog(@"%@",strring);
NSMutableString和NSString的区别:
1)NSString是不可变的,里面的文字内容是不能进行修改的
2)NSMutanleString是可变的,里面的文字内容可以随便更改
3)NSMubleString继承自NSStirng,能使用NSString的所有方法
NSMutableString常用方法
stringWithFormat:格式化添加字符串
deleteCharactersInRange:删除字符串的一部分
insertString:在指定位置插入字符串
replaceCharactersInRange:替换字符串的一部分
NSMubleString的string属性可以把字符串覆盖
给可变字符串赋值为不可变字符串,报错
NSMutableString *strring=[NSMutableString stringWithFormat:@"Jack"]; //NSMutableString *strring=[NSMutableString string]; [strring appendFormat:@"itcast"]; [strring appendString:@"ssss"]; NSLog(@"%@",strring); NSRange range1={2,3}; [strring deleteCharactersInRange:range1]; [strring insertString:@"fanyf" atIndex:8]; NSLog(@"%@",strring); [strring replaceCharactersInRange:range1 withString:@"rrr"]; NSLog(@"%@",strring);
3.NSArray只能存放任意OC对象,并且是有序的
数组元素不能存nil,改成[NSNull null],最后一个nil表示赋值结束,
//创建一个空数组 NSArray *arr=[NSArray array]; NSLog(@"%@",arr); //创建数组,只有一个元素 NSArray *arr2=[NSArray arrayWithObject:@"acc"]; NSLog(@"%@",arr2); //创建数组,有多个元素 NSArray *arr3=[NSArray arrayWithObjects:@"one",@"two",@"three",nil]; NSLog(@"%@",arr3); //调用对象方法,创建数组 NSArray *arr4=[[NSArray alloc] initWithObjects:@"one",@"two",@"three",nil]; NSLog(@"%@",arr4); //用一个数组可以创建另外的一个数组 NSArray *arr5=[NSArray arrayWithArray:arr3]; NSLog(@"%@",arr5);
count获取数组长度
ObjectAtIndex:获取某个位置的元素
indexofObject:返回某个元素的下标
laseObject:
firstObject:
containObject:是否包含这个元素返回BOOL
NSLog(@"%ld",arr3.count);//得到数组长度 NSLog(@"%@",[arr5 objectAtIndex:1]);//得到位置是1的元素的值 NSUInteger loc= [arr5 indexOfObject:@"two"];//元素的位置 NSLog(@"%ld",loc); BOOL isContain=[arr5 containsObject:@"one"];//数组是否包含 NSLog(@"%@",isContain); NSArray *arr11=@[@"111",@"2",@11];//数组的简化写法 NSLog(@"%@",arr11[0]);//数组的简化访问
数组的遍历(一般方法和快速枚举法):
//数组的遍历1 for (NSString *str in arr11) { NSLog(@"数组遍历:%@",str); } //数组的遍历2,用block遍历 [arr5 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { //if(idx==2){ // *stop=YES; //}else{ NSLog(@"idx=%ld,obj=%@",idx,obj); //} }];
读写文件,xml格式或者plist格式
BOOL isWrite= [arr11 writeToFile:@"/Users/fanyafang/Desktop/arr.txt" atomically:YES]; if(isWrite){ NSLog(@"写入成功!"); } NSArray *readArr= [NSArray arrayWithContentsOfFile:@"/Users/fanyafang/Desktop/arr.txt"]; NSLog(@"readArr=%@",readArr);
数组中的字符串用"-"连接起来
字符串分割成一个数组
//数组连接 NSString *str=[arr5 componentsJoinedByString:@"-"]; NSLog(@"%@",str); //字符串分隔 str=@"400-800-12580"; NSArray *arr6=[str componentsSeparatedByString:@"-"]; NSLog(@"%@",arr6);
4.NSMutableArray
NSMutableArray *marr=[NSMutableArray arrayWithObject:@"12"]; NSMutableArray *marr2=[NSMutableArray arrayWithObjects:@"1",@"2",@"3",nil]; NSMutableArray *marr3=[NSMutableArray arrayWithCapacity:5]; //添加元素 [marr2 addObject:@"fengjie"]; NSLog(@"%@",marr2); [marr2 insertObject:@"sdd" atIndex:2]; //删除元素 NSLog(@"%@",marr2); [marr2 removeObject:@"sdd"]; NSLog(@"%@",marr2); [marr2 removeObjectAtIndex:2]; NSLog(@"%@",marr2); //删除元素 [marr2 replaceObjectAtIndex:1 withObject:@"111"]; NSLog(@"%@",marr2); //是否包含元素 NSLog(@"%@",[marr2 containsObject:@"111"]); //交换元素 [marr2 exchangeObjectAtIndex:0 withObjectAtIndex:2]; NSLog(@"%@",marr2);
5.NSDictionary
enumerateKeysAndObjectsUsingBlock用代码块遍历
简写形式:
6.NSMutableDictionary
7.NSFileManager
//NSFileManager用于判断 NSString *path=@"/Users/fanyafang/Desktop/str.txt"; NSString *path2=@"/Users/fanyafang/Desktop"; NSFileManager *fm=[NSFileManager defaultManager]; //1)判断文件是否存在 BOOL isyes=[fm fileExistsAtPath:path]; //2)判断是否是目录 if(isyes){ BOOL isDir; [fm fileExistsAtPath:path2 isDirectory:&isDir]; if(isDir){ NSLog(@"是一个目录"); } } isyes=[fm isReadableFileAtPath:path];//3)是否可读 isyes=[fm isWritableFileAtPath:path];//4)是否可写 isyes=[fm isDeletableFileAtPath:path];//5)是否可删除 //1)获取文件信息 NSDictionary *dict=[fm attributesOfItemAtPath:path error:nil]; NSLog(@"%@",dict); NSLog(@"%@",[dict objectForKey:@"NSFileCreationDate"]); //2)获取指定目录下的文件及子目录 NSArray * arr=[fm subpathsAtPath:path2];//递归方式 arr=[fm subpathsOfDirectoryAtPath:path2 error:nil];//不使用递归方式 //3)获取知道目录下得子目录(不获取后代路径) arr=[fm contentsOfDirectoryAtPath:path2 error:nil]; NSLog(@"%@",arr); //1)创建路径 NSString *dirPath=@"/Users/fanyafang/Desktop/aaa"; BOOL isYes=[fm createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:nil]; //2)创建文件 NSString *str=@"每当我错过一个女孩。。。。"; NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding]; isyes=[fm createFileAtPath:path contents:data attributes:nil]; //3)复制 NSString *targetPath=@"/Users/fanyafang/Desktop/aaa/str.txt"; [fm copyItemAtPath:path toPath:targetPath error:nil]; //4)移动文件 NSString *targetPath2=@"/Users/fanyafang/Desktop/aaa/bbb/str.txt"; [fm moveItemAtPath:path toPath:targetPath2 error:nil]; //5)删除文件 [fm removeItemAtPath:targetPath error:nil];
8.ios沙盒(sandbox)机制及获取沙盒路径
文件系统
1)获取沙盒跟目录
NSHomeDirectory();
2)获取doucuments目录
NSSearchPathForDirectoriesInDomains();
9.常见结构体
//CGPoint和NSPoint CGPoint p; p.x=1; p.y=3; CGPoint pp={1,3}; NSPoint p1; p1.x=2; p1.y=3; NSPoint p2={2,3}; CGPoint p3=CGPointMake(1, 3); NSPoint p4=NSMakePoint(2, 2); //CGSize和NSSize CGSize s1={23,43}; CGSize s2; s2.width=12; s2.height=14; NSSize s3={23,43}; NSSize s4; s4.width=23; s4.height=33; CGSize s5=CGSizeMake(2, 3); NSSize s6=NSMakeSize(34, 45); //CGRect和NSRect CGRect rr={{1,2},{33,44}}; CGRect r1=CGRectMake(1, 3, 4, 6); NSRect r2=NSMakeRect(3, 2, 44, 66); NSLog(@"%@",NSStringFromRect(r2));
10.NSNumber
NSNumber *n=[NSNumber numberWithInt:10]; NSNumber *n2=[NSNumber numberWithFloat:10.1f]; NSNumber *n3=[NSNumber numberWithDouble:12.1]; NSArray *arr=[NSArray arrayWithObjects:n,n2,n3, nil]; NSLog(@"%@",arr); int a=[n intValue]; NSLog(@"%d",a); float f=[arr[1] floatValue]; //简写@18 @(变量名)
11.集合对象的内存管理
1)只要把对象放到数组中,对象的引用计数+1
2)数组在销毁的适合,对对象发送一次release消息
12.copy
类必须遵守NSCopying协议,才能使用copy方法复制对象
使用copy产生的是不可变的副本,是浅复制,因为没有产生新的对象
使用mutableCopy产生的是可变的副本,是深复制,分配一块新的内存空间
@property中的copy关键字
适用于NSString/Block
13.为自定义类实现copy方法
遵守NSCopying协议
实现默认的方法,返回新对象
自定义对象都是深拷贝
14.单例模式