框架:由许多类,方法,函数和文档按照一定逻辑组织起来的集合
来源:互联网 发布:mac电量消耗变快 编辑:程序博客网 时间:2024/05/16 18:40
版权声明:本文为博主原创文章,未经博主允许不得转载。
框架:由许多类,方法,函数和文档按照一定逻辑组织起来的集合
不小心修改了系统的文件,引起的错误
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- NSString *str1 = @"abc";
- NSString *str2 = @"Abc";
- NSString *str4 = @"Abc";
- NSString *str3 = [NSString stringWithFormat:@"abc"];
- //str3在堆区,而str1,str2在常量区
- //所以 ==不能判断字符串是否相等
- //不是类变量前不用加 *
- //NSComparisonResult 是一个枚举类型
- //compare 默认区分大小写
- //NSComparisonResultresult =[str1 compare:str2 ];
- //如果要区分大小写
- NSComparisonResultresult =[str1 compare:str2options:NSCaseInsensitiveSearch|NSNumericSearch];
- switch (result) {
- case NSOrderedAscending:
- NSLog(@"str1 < str2升序");
- break;
- case NSOrderedDescending:
- NSLog(@"str1 > str2降序");
- break;
- case NSOrderedSame:
- NSLog(@"str1 == str2相等");
- break;
- default:
- break;
- }
- //常量字符串,在常量区只有一份,地址一定是一样的
- if(str2 == str4){
- NSLog(@"相等");
- }
- else{
- NSLog(@"不相等");
- }
- //isEqualToString区分大小写的
- if( [str2 isEqualToString:str4]){
- NSLog(@"相等");
- }
- else{
- NSLog(@"不相等");
- }
- }
- return 0;
- }
位枚举
常用的三个函数
- #import<Foundation/Foundation.h>
- //检测字符串的前缀和后缀
- void qianzhuihouzhui( )
- {
- NSString *url = @"http://www.baidu.com";
- if ([url hasPrefix:@"https://"]|[urlhasPrefix:@"http://"]){
- NSLog(@"http或者https协议网站");
- }
- else
- {
- NSLog(@"不是一个http协议网址");
- }
- if( [url hasSuffix:@".com"]){
- NSLog(@".com结尾网站");
- }
- else{
- NSLog(@"不是.com结尾网站");
- }
- }
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //字符串的查找某个字符串在另一个字符串首次出现的位置
- NSString*str1 =@"sdsaiosaaaiosbbbb";//字符串中有两个ios
- NSString *str2 = @"ioss";
- NSRange range = [str1 rangeOfString:str2];
- //range.length 字符串的长度
- //range.location 字符串首次出现的位置如果查找不到会返回一个特别大的数字
- if (range.location!=NSNotFound) {
- NSLog(@"%lu,%lu",range.length,range.location);
- }
- else{
- NSLog(@"没有在%@中查找到%@",str1,str2);
- }
- }
- return 0;
- }
NSRange是一个结构体变量
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- NSRange range ;//结构体变量
- NSRange *r ;//结构体指针
- //第一种赋值方法
- range.location = 3 ;
- range.length = 3 ;
- //结构体整体变量赋值
- range = (NSRange){3,3};
- //3)
- NSRange r3 = {.location = 3};//此时length没有赋初始值
- //4) oc新增
- NSRange r4 = NSMakeRange(3,3);
- //loca, len
- //查看结构体变量值
- NSLog(@"%ld,%ld",r4.location,r4.length);
- NSString *str = NSStringFromRange(r4);
- NSLog(@"%@",str);
- //{3, 3}
- r->length = 3;
- r->location = 3;
- //NSLog(@"%ld,%ld",r->location,r->length);
- }
- return 0;
- }
- //
- // main.m
- // NSString字符串的截取
- //
- // Created by CHINGWEI_MACPC on 15/12/16.
- // Copyright © 2015年 itcast. All rights reserved.
- //
- #import<Foundation/Foundation.h>
- void test(){
- NSString *url = @"http://www.baidu.com";
- NSString *url1 = [url substringFromIndex:5];
- NSLog(@"url1 =%@",url1);
- // //www.baidu.com
- NSString *str2 = [url substringToIndex:5];
- NSLog(@"str2 =%@",str2);
- //http:
- NSRange r1 = {7,13};
- NSString *str3 = [url substringWithRange:r1];
- NSLog(@"str3 =%@",str3);
- //www.baidu.com
- }
- void test2()
- {
- NSString *str =@"<itcast>黑马程序员</itcast>";
- NSUInteger loc = [str rangeOfString:@">"].location +1 ;
- NSUInteger len = [str rangeOfString:@"</"].location - loc ;
- NSRange r2 = {loc,len};
- NSString *subStr = [str substringWithRange:r2];
- NSLog(@"%@",subStr);
- }
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //字符串替换
- NSString *str = @"dsdsaaasds aasd saaa ";
- NSString *str2 = [str stringByReplacingOccurrencesOfString:@"a"withString:@"*"];
- NSLog(@"替换后的字符串为:%@",str2);
- NSRange r2 = {0,1};
- NSString *str3 = [str stringByReplacingCharactersInRange:r2withString:@""];
- NSUInteger len = [str3 length];
- NSRange r3 = {len-1,1};
- str3 = [str3 stringByReplacingCharactersInRange:r3 withString:@""];
- NSLog(@"str3去掉空格后为 \"%@\"",str3);
- //替换后的字符串为:dsds***sds**sds***
- NSString *s1 =@"dsdsaaasds aasd saaa ";
- str3 = [s1 stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceCharacterSet]];
- NSLog(@"老师方法去掉收尾空格后 \"%@\"",str3);
- }
- return 0;
- }
- void test(){
- NSString *str1 = @"150";
- NSString *str2 = @"100";
- //强制类型转换
- int num1 = [str1 intValue];
- int num2 = [str2 intValue];
- int minus = num1 - num2 ;
- }
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //oc和 c语言字符串互换
- //1)c -->oc 对象
- char *s = "zs";
- NSString *str = [NSString stringWithUTF8String:s];
- NSLog(@"%@",str);
- //2oc--->c
- NSString *str2 = @"zbz";
- ///Users/chingwei_macpc/Documents/Foundation框架/字符串和其他数据类型转换/main.m:34:17:Initializing 'char *' with an expression of type 'const char * _Nullable'discards qualifiers
- const char*s1 = [str2 UTF8String] ;
- printf("%s\n",s1);
- }
- return 0;
- }
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //int a a 是存在栈区
- NSString*str2=@"jack";//NSString 是在常量区不可变
- NSLog(@"str2=%p",str2 );
- //str2=0x100001048
- str2=@"rose";//NSString 是在常量区不可变
- NSLog(@"str2=%p",str2 );
- //str2=0x100001088
- //同一个变量地址不一样常量一样就存在一个内存区
- //字符串所占的空间和字符串都不能改变
- //[NSMutableString stringWithFormat:@"jack"]存入堆区
- //字符串在内存占用的空间是不固定,并且存储内容可以被修改
- NSMutableString *str1 = [NSMutableStringstringWithFormat:@"jack"];
- NSLog(@"str1=%p",str1);
- //str1=0x100204290
- [str1 appendFormat:@"rose"];//格式化添加
- NSLog(@"%@=%p",str1,str1);
- //str1=0x100204290
- NSMutableString *s2 =[NSMutableString string];
- NSString *s3=@"itcast";
- for (inti = 0; i<10; i++) {
- [s2 appendString:s3];
- }
- NSLog(@"%@",s2);
- }
- return 0;
- }
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //append格式化添加字符串
- NSMutableString *str = [NSMutableStringstring];
- [str appendFormat:@"http://www.baidu.com"];
- NSLog(@"%@",str);
- //因为是可变的不需要void返回值
- //删除字符串的某一个范围
- [str deleteCharactersInRange:NSMakeRange(5, 2)];
- NSLog(@"%@",str);
- //http:www.baidu.com
- //插入一个字符串
- [str insertString:@"\\\\" atIndex:5];
- NSLog(@"%@",str);
- //替换字符串的一部分内容
- [str replaceCharactersInRange:NSMakeRange(11, 5)withString:@"itcast"];
- NSLog(@"%@",str);
- //http:\\www.itcast.com
- //易犯错误
- //1)@"sd"是NSString
- NSMutableString *test = @"sd";
- ///Users/chingwei_macpc/Documents/Foundation框架/NSMutableString常用方法/main.m:37:26: Incompatible pointertypes initializing 'NSMutableString *' with an expression of type 'NSString *'
- NSLog(@"%@",test);
- //[test appendFormat:@"asd"];
- //给常量值赋值报错
- //2).
- NSMutableString *test1 =[NSMutableStringstring];
- str.string =@"";//用空覆盖
- [str appendFormat:@"xxxxxx"];
- NSLog(@"%@",test1);
- //输出为空
- //3).到底用NSMutableString还是NSString
- //特殊处理的时候字符串拼接,替换等才用到NSMUtableString
- }
- return 0;
- }
位枚举
NSArray
OC中数组类,C语言只能存放一种类型数据,不能很方便的动态添加数组元素,不能方便动态的删除数组元素(长度固定)
NSArray只能存放任意oc对象,并且顺序的,不能存储非oc对象
比如int/float/double/char/enum/struct
一旦初始化完毕,它里面的内容永远固定的
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //创建一个空数组
- NSArray *arr1 =[NSArray array];
- //创建一个数组,只有元素;
- NSArray * arr2 =[NSArray arrayWithObject:@"1"];
- //创建数组,有多个元素常见写法
- NSArray *arr3 = [NSArray arrayWithObjects:@"1",@"2",@"3",@4,nil];
- //调用对象方法创建数组 nil表示赋值结束,但不存储nil
- NSArray *arr4 = [[NSArray alloc] initWithObjects:@"1",[NSNullnull],@"2",@"3",nil];
- //用一个数组可以创建另外一个数组
- NSArray *arr5 = [NSArray arrayWithArray:arr3];
- }
- return 0;
- }
NSArray常见用法
- void test(){
- NSArray *arr =[NSArray arrayWithObjects:@"1",@"2",@"3",nil];
- //获得数组长度
- NSLog(@"%ld",arr.count);//3
- //获取下标对应的对象
- NSLog(@"%@",[arr objectAtIndex:2]);
- //返回元素下标
- NSUInteger loc = [arr indexOfObject:@"2"];
- NSLog(@"%ld",loc);
- //数组中是否包含了此元素
- if ([arr containsObject:@"2"]) {
- NSLog(@"包含元素@\"2\"");
- }
- else
- {
- NSLog(@"不包含");
- }
- }
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //简化的方式定义数组
- NSArray *arr =@[@"1",@"2",@"3",@4,@"One"];
- NSString *st1 = arr[1];
- NSLog(@"%@",st1);
- }
- return 0;
- }
数组遍历
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- NSArray *arr =@[@"1st",@"2nd",@"3rd",@4,@"5th"];
- //遍历1通过下标访问
- for (inti = 0 ; i < arr.count; i ++) {
- NSLog(@"arr[%d] -> %@",i,arr[i]);
- }
- //遍历2快速枚举法 for循环增强形式
- int i = 0 ;
- for (NSString* str in arr) {
- NSLog(@"arr[%d] --> %@",i,str);
- i++;
- }
- //遍历3 block
- [arr enumerateObjectsUsingBlock:^(id _Nonnullobj, NSUInteger idx, BOOL * _Nonnull stop) {
- if(idx == 2)
- {
- *stop =YES;//停止类似break;
- }
- else{
- NSLog(@"idx = %ld ,obj = %@",idx,obj);
- }
- }];
- }
- return 0;
- }
NSArray读写文件
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- NSArray *arr =@[@"1st",@"2nd",@"3rd",@4,@"5th"];
- //将NSArray写入到文件中
- BOOL isWrite = [arr writeToFile:@"/Users/chingwei_macpc/Desktop/iosxxx.plist"atomically:YES];
- if (isWrite) {
- NSLog(@"写入成功");
- }
- else
- {
- NSLog(@"写入失败");
- }
- NSArray *readArr = [NSArrayarrayWithContentsOfFile:@"/Users/chingwei_macpc/Desktop/iosxxx.plist"];
- NSLog(@"readArr= %@",readArr);
- }
- return 0;
- }
NSArray和字符串
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- NSArray *arr =@[@"1st",@"2nd",@"3rd",@"4th"];
- NSString *str = [arr componentsJoinedByString:@"-"];
- NSLog(@"%@",str);
- NSString *str2 = @"400-233-8900#400-233-3333";
- //先分割#再分成两部电话
- arr = [str2 componentsSeparatedByString:@"-"];
- NSLog(@"%@",[arrfirstObject]);
- NSLog(@"%@",[arrlastObject]);
- NSLog(@"%@",arr[1]);
- }
- return 0;
- }
NSMutableArray基本应用
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //空数组
- NSMutableArray *arr1 = [NSMutableArray array];
- //创建一个初始化多个元素
- NSMutableArray *arr2 =[NSMutableArray arrayWithObjects:@"1st", @"2nd",@"3rd",@"4th",nil];
- //默认创建一个长度为5,也可以再继续扩充长度
- NSMutableArray *arr3 = [NSMutableArray arrayWithCapacity:5];
- //添加元素
- [arr1 addObject:@"a1"];
- [arr1 addObject:@"a2"];
- [arr2 insertObject:@"5th" atIndex:4];
- NSLog(@"%@",arr2);
- //删除元素
- [arr2 removeObject:@"5th"];
- NSLog(@"%@",arr2);
- [arr2 removeObjectAtIndex:3];
- NSLog(@"%@",arr2);
- //替换元素
- [arr2 replaceObjectAtIndex:2 withObject:@"3three"];
- NSLog(@"%@",arr2);
- //查找元素
- BOOL isSerach = [arr2 containsObject:@"2nd"];
- NSLog(@"%d",isSerach);
- //交换元素
- [arr2 exchangeObjectAtIndex:0 withObjectAtIndex:2];
- NSLog(@"%@",arr2);
- }
- return 0;
- }
字典的遍历
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //创建一个空字典
- NSDictionary *dict1 = [NSDictionary dictionary];
- //创建只有一组键值对的字典
- NSDictionary*dict2 = [NSDictionarydictionaryWithObject:@"张三"forKey:@"zs"];
- NSLog(@"%@",dict2);
- // zs = "\U5f20\U4e09";
- //创建多组键值对的字典 key和value都必须是对象
- NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"k1",@"value2",@"k2",nil];
- NSLog(@"%@",dict3);
- //快速创建一个字典键值不能重复,如果有重复也是显示最后一个键值
- NSDictionary *ditc4 = @{@"k1":@"value1",@"k2":@"value2",@"k3":@"value3"};
- NSLog(@"%@",ditc4);
- //打印字典的长度
- NSLog(@"%ld",ditc4.count);
- //根据key值取出value值
- NSString *str = [ditc4 objectForKey:@"k1"];
- NSLog(@"%@",str);
- //字典的遍历问题
- //第一步:获取所有的key
- //第二步:根据key获取value
- for(NSString*key in ditc4){
- NSString *value =[ditc4 objectForKey:key];
- NSLog(@"key= %@ ,value =%@",key,value);
- }
- [ditc4 enumerateKeysAndObjectsUsingBlock:^(id key,idobj, BOOL * stop) {
- {
- NSLog(@"key = %@ , value = %@",key,obj);
- }
- }];
- }
- return 0;
- }
NSString类介绍基本使用
- #import<Foundation/Foundation.h>
- void test(){
- //1.@""常量字符串
- //atomically//原子性在写入的过程中别人是否能读
- //NSUTF8StringEncodingxcode默认的文字编码格式
- NSString *str =@"zhangsan李四";
- NSError *err ;//错误对象
- [str writeToFile:@"/Users/chingwei_macpc/desktop/1.txt"atomically:YESencoding:NSUTF8StringEncodingerror:&err];//error需要二级指针s
- if (err!=nil) {
- NSLog(@"写入失败!%@",err);
- }
- else{
- NSLog(@"写入成功");
- }
- }
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- test();
- NSError *err ;//错误对象
- NSString *str = [NSString stringWithContentsOfFile:@"/Users/chingwei_macpc/desktop/1.txt"encoding:NSUTF8StringEncodingerror:&err] ;
- if (err!=nil){
- NSLog(@"读取失败!%@",err);
- }
- else{
- NSLog(@"读取成功 %@",str);
- }
- }
- return 0;
- }
NSDictionary快捷使用方式
- #import<Foundation/Foundation.h>
- void test(){
- NSDictionary *dict4 = @{@"k1":@"value1",@"k2":@"value2",@"k3":@"value3"};
- //简写形式获取key对应的value
- NSLog(@"%@",dict4[@"k1"]);
- //把字典保存到文件中
- BOOL isWrite = [dict4 writeToFile:@"/users/chingwei_macpc/desktop/p.plist"atomically:YES];
- NSLog(@"%d",isWrite);
- NSDictionary *nsd = [NSDictionary dictionaryWithContentsOfFile:@"/users/chingwei_macpc/desktop/p.plist"];
- NSLog(@"%@",nsd);
- }
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- 668993
- *ln = [NSArrayarrayWithObjects:@"大连",@"沈阳",nil];
- NSArray *hb =[NSArrayarrayWithObjects:@"保定",@"石家庄",nil];
- NSDictionary *dct = [NSDictionary dictionaryWithObjectsAndKeys:ln,@"ln",hb,@"hb",nil ];
- NSLog(@"%@",dct);
- [dct writeToFile:@"/users/chingwei_macpc/desktop/p1.plist"atomically:YES];
- NSDictionary *dct1 = [NSDictionary dictionaryWithContentsOfFile:@"/users/chingwei_macpc/desktop/p1.plist" ];
- [dct1 enumerateKeysAndObjectsUsingBlock:^(id key,id obj, BOOL *stop) {
- for (NSString *str inobj ) {
- NSLog(@"city =%@ ",str);
- }
- }];
- //获取每个数组
- NSArray * arr = dct1[@"ln"];
- NSLog(@"%@",arr);
- /*(
- "\U5927\U8fde",
- "\U6c88\U9633"
- )*/
- NSLog(@"%@",[arrlastObject]);//沈阳
- }
- return 0;
- }
罗永浩用演讲赚来的钱捐给了https这个组织
NSURL其实就是我们在浏览器上看到的网站地址,这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以封装一个NSURL,操作很方便:
fileURLWithPath通过本地路径创建url文件路径
Url可以是网络路径,本地路径,其他的协议,sms,tel,https,ftp
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- NSString *str = @"$10000000";
- NSURL *url = [NSURL URLWithString:@"file:///Users/chingwei_macpc/Desktop/3.txt"];
- NSURL *url2 = [NSURL fileURLWithPath:@"sms://10086"];
- NSURL *url3 = [NSURL fileURLWithPath:@"tel://10086"];
- NSURL *url4 = [NSURL URLWithString:@"/Users/chingwei_macpc/Desktop/4.txt"];
- if([str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil])
- {
- NSLog(@"写入成功");
- }
- if([str writeToURL:url4 atomically:YES encoding:NSUTF8StringEncoding error:nil])
- {
- NSLog(@"2写入成功");
- }
- NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncodingerror:nil];
- NSLog(@"str2= %@",str2);
- }
- return 0;
- }
NSFileManager介绍和用法
- //判断文件是否存在
- NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";
- NSString *filePath2 = @"/Users/chingwei_macpc/Desktop";
- NSString *filePath3 = @"/";
- //调用defaultmanager创建一个文件管理单例对象
- //单利对象,程序运行期间,只有一个对象存在
- NSFileManager *fm = [NSFileManager defaultManager];
- BOOL isExist= [fm fileExistsAtPath:filePath];
- NSLog(@"--->%d",isExist);
- //判断是否在同一目录
- if(isExist){
- BOOL *isDir ;
- [fm fileExistsAtPath:filePath2isDirectory:isDir];
- if (isDir) {
- NSLog(@"这是一个目录");
- }
- else{
- NSLog(@"这不是一个目录");
- }
- }
- //判断是否写
- BOOL isYes = [fm isWritableFileAtPath:filePath3];
- NSLog(@"是否可写--->%d",isYes);
- //是否可读
- isYes = [ fm isReadableFileAtPath:filePath3];
- NSLog(@"是否可读--->%d",isYes);
- //是否可删除
- isYes = [fm isDeletableFileAtPath:filePath3];
- NSLog(@"是否可删除--->%d",isYes);
- }
- return 0;
- }
NSFileManager 获取文件属性和信息
- NSFileManager *fm = [NSFileManager defaultManager];
- NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";
- //获取文件信息
- //nil 表示错误信息不接收
- NSDictionary *dict = [fm attributesOfItemAtPath:filePatherror:nil];
- NSLog(@"%@",dict);
- NSFileCreationDate = "2016-01-04 03:53:29+0000";
- NSFileExtendedAttributes = {
- "com.apple.TextEncoding" = <7574662d 383b3133 34323137 393834>;
- };
- NSFileExtensionHidden = 0;
- NSFileGroupOwnerAccountID = 20;
- NSFileGroupOwnerAccountName = staff;
- NSFileHFSCreatorCode = 0;
- NSFileHFSTypeCode = 0;
- NSFileModificationDate ="2016-01-04 03:53:29 +0000";
- NSFileOwnerAccountID = 501;
- NSFileOwnerAccountName ="chingwei_macpc";
- NSFilePosixPermissions = 420;
- NSFileReferenceCount = 1;
- NSFileSize = 9;
- NSFileSystemFileNumber = 11310930;
- NSFileSystemNumber = 16777220;
- NSFileType = NSFileTypeRegular;
- }
- NSLog(@"%@,%@",[dictobjectForKey:@"NSFileOwnerAccountName"],dict[NSFileOwnerAccountName]);
- chingwei_macpc,chingwei_macpc
- NSFileManager *fm = [NSFileManager defaultManager];
- NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";
- NSString *subPath = @"/Users/chingwei_macpc/Desktop/music";
- //获取文件信息
- //nil 表示错误信息不接收
- NSDictionary *dict = [fm attributesOfItemAtPath:filePatherror:nil];
- NSLog(@"%@",dict);
- NSLog(@"%@,%@",[dict objectForKey:@"NSFileOwnerAccountName"],dict[NSFileOwnerAccountName]);
- //获得指定目录下的文件及子目录
- //使用递归方式获取
- NSArray *nsarr = [fm subpathsAtPath:subPath];
- //NSLog(@"%@",nsarr);
- //subpathsOfDirectoryAtPath不是使用递归方式
- //递归方式是往栈里放,递归效率低,后进先出,如果文件多,耗性能
- nsarr = [fm subpathsOfDirectoryAtPath:subPatherror:nil];
- //NSLog(@"%@",nsarr);
- //获取指定目录下的子目录(不在获取后代路径)
- nsarr = [fm contentsOfDirectoryAtPath:subPatherror:nil];
- NSLog(@"%@",nsarr);
- }
- return 0;
- 2016-01-04 23:08:35.062 nsfilemanager获取文件信息[1270:109681] {
- NSFileCreationDate = "2016-01-0403:53:29 +0000";
- NSFileExtendedAttributes = {
- "com.apple.TextEncoding" = <7574662d 383b3133 34323137 393834>;
- };
- NSFileExtensionHidden = 0;
- NSFileGroupOwnerAccountID = 20;
- NSFileGroupOwnerAccountName = staff;
- NSFileHFSCreatorCode = 0;
- NSFileHFSTypeCode = 0;
- NSFileModificationDate ="2016-01-04 03:53:29 +0000";
- NSFileOwnerAccountID = 501;
- NSFileOwnerAccountName ="chingwei_macpc";
- NSFilePosixPermissions = 420;
- NSFileReferenceCount = 1;
- NSFileSize = 9;
- NSFileSystemFileNumber = 11310930;
- NSFileSystemNumber = 16777220;
- NSFileType = NSFileTypeRegular;
- }
- 2016-01-04 23:08:35.063 nsfilemanager获取文件信息[1270:109681]chingwei_macpc,chingwei_macpc
- 2016-01-04 23:08:35.079 nsfilemanager获取文件信息[1270:109681] (
- ".DS_Store",
- "Avril Lavigne - Let Me Go @ GoodMorning America (5_11).mp4",
- "Avril Lavigne - Live at Buffalo(NY) - My World DVD - Try to Shut Me Up Tour 2003.mp4",
- "Avril Lavigne - Live in Amsterdam(Netherlands) 17_03_2003.mp4",
- "Blink-182 - Live @ Red Bull SoundSpace (presented by KROQ) (2013-11-07).mp4",
- "blink-182 - Live at Blizzcon 2013[FULL SHOW] HD.mp4",
- "blink-182 - live in Las Vegas 2011[FULL SHOW] HD.mp4",
- "GREEN DAY - ROCK AM RING 2013[LIVE HD].mp4",
- "Jon Bon Jovi - Knockin' OnHeaven's Door (Mexico 1997).mp4",
- kgmusic,
- LP,
- "One Ok Rock live in Mexico -YouTube [360p].mp4",
- "querty\U6b4c\U8bcd.txt",
- "ROOKiEZ is PUNK'D Street Live inIkebukuro -\U30b3\U30f3\U30d5\U309a\U30ea\U30b1\U30a4\U30b7\U30e7\U30f3\Uff08\U30a2\U30b3\U30fc\U30b9\U30c6\U30a3\U30c3\U30af\Uff09.mp4",
- "Slash ft. Myles Kennedy &The Conspirators - Live at Pinkpop 2015 (Full Show) - YouTube [720p].mp4",
- "Slash ft. Myles Kennedy _ TheConspirators - Live at Pinkpop 2015 (Full Show).mp4",
- "Slash Max Sessions Unplugged HD -YouTube [720p].mp4",
- "Velvet Revolver -Patience.mp4",
- "\U5409\U4ed6",
- "\U6742",
- "\U77edLIVE",
- "\U82f1\U96c4\U8054\U76df"
- )
- Program ended with exit code: 0
- NSFileManager *fm = [NSFileManager defaultManager];
- NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";
- //获取文件信息
- //nil 表示错误信息不接收
- NSDictionary *dict = [fm attributesOfItemAtPath:filePatherror:nil];
- NSLog(@"%@",dict);
- NSFileCreationDate = "2016-01-04 03:53:29+0000";
- NSFileExtendedAttributes = {
- "com.apple.TextEncoding" = <7574662d 383b3133 34323137 393834>;
- };
- NSFileExtensionHidden = 0;
- NSFileGroupOwnerAccountID = 20;
- NSFileGroupOwnerAccountName = staff;
- NSFileHFSCreatorCode = 0;
- NSFileHFSTypeCode = 0;
- NSFileModificationDate ="2016-01-04 03:53:29 +0000";
- NSFileOwnerAccountID = 501;
- NSFileOwnerAccountName ="chingwei_macpc";
- NSFilePosixPermissions = 420;
- NSFileReferenceCount = 1;
- NSFileSize = 9;
- NSFileSystemFileNumber = 11310930;
- NSFileSystemNumber = 16777220;
- NSFileType = NSFileTypeRegular;
- }
- NSLog(@"%@,%@",[dictobjectForKey:@"NSFileOwnerAccountName"],dict[NSFileOwnerAccountName]);
chingwei_macpc,chingwei_macpc
- NSFileManager *fm = [NSFileManager defaultManager];
- NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";
- NSString *subPath = @"/Users/chingwei_macpc/Desktop/music";
- //获取文件信息
- //nil 表示错误信息不接收
- NSDictionary *dict = [fm attributesOfItemAtPath:filePatherror:nil];
- NSLog(@"%@",dict);
- NSLog(@"%@,%@",[dict objectForKey:@"NSFileOwnerAccountName"],dict[NSFileOwnerAccountName]);
- //获得指定目录下的文件及子目录
- //使用递归方式获取
- NSArray *nsarr = [fm subpathsAtPath:subPath];
- //NSLog(@"%@",nsarr);
- //subpathsOfDirectoryAtPath不是使用递归方式
- //递归方式是往栈里放,递归效率低,后进先出,如果文件多,耗性能
- nsarr = [fm subpathsOfDirectoryAtPath:subPatherror:nil];
- //NSLog(@"%@",nsarr);
- //获取指定目录下的子目录(不在获取后代路径)
- nsarr = [fm contentsOfDirectoryAtPath:subPatherror:nil];
- NSLog(@"%@",nsarr);
- }
- return 0;
2016-01-04 23:08:35.062 nsfilemanager获取文件信息[1270:109681] {
NSFileCreationDate = "2016-01-0403:53:29 +0000";
NSFileExtendedAttributes = {
"com.apple.TextEncoding" = <7574662d 383b3133 34323137 393834>;
};
NSFileExtensionHidden = 0;
NSFileGroupOwnerAccountID = 20;
NSFileGroupOwnerAccountName = staff;
NSFileHFSCreatorCode = 0;
NSFileHFSTypeCode = 0;
NSFileModificationDate ="2016-01-04 03:53:29 +0000";
NSFileOwnerAccountID = 501;
NSFileOwnerAccountName ="chingwei_macpc";
NSFilePosixPermissions = 420;
NSFileReferenceCount = 1;
NSFileSize = 9;
NSFileSystemFileNumber = 11310930;
NSFileSystemNumber = 16777220;
NSFileType = NSFileTypeRegular;
}
2016-01-04 23:08:35.063 nsfilemanager获取文件信息[1270:109681]chingwei_macpc,chingwei_macpc
2016-01-04 23:08:35.079 nsfilemanager获取文件信息[1270:109681] (
".DS_Store",
"Avril Lavigne - Let Me Go @ GoodMorning America (5_11).mp4",
"Avril Lavigne - Live at Buffalo(NY) - My World DVD - Try to Shut Me Up Tour 2003.mp4",
"Avril Lavigne - Live in Amsterdam(Netherlands) 17_03_2003.mp4",
"Blink-182 - Live @ Red Bull SoundSpace (presented by KROQ) (2013-11-07).mp4",
"blink-182 - Live at Blizzcon 2013[FULL SHOW] HD.mp4",
"blink-182 - live in Las Vegas 2011[FULL SHOW] HD.mp4",
"GREEN DAY - ROCK AM RING 2013[LIVE HD].mp4",
"Jon Bon Jovi - Knockin' OnHeaven's Door (Mexico 1997).mp4",
kgmusic,
LP,
"One Ok Rock live in Mexico -YouTube [360p].mp4",
"querty\U6b4c\U8bcd.txt",
"ROOKiEZ is PUNK'D Street Live inIkebukuro -\U30b3\U30f3\U30d5\U309a\U30ea\U30b1\U30a4\U30b7\U30e7\U30f3\Uff08\U30a2\U30b3\U30fc\U30b9\U30c6\U30a3\U30c3\U30af\Uff09.mp4",
"Slash ft. Myles Kennedy &The Conspirators - Live at Pinkpop 2015 (Full Show) - YouTube [720p].mp4",
"Slash ft. Myles Kennedy _ TheConspirators - Live at Pinkpop 2015 (Full Show).mp4",
"Slash Max Sessions Unplugged HD -YouTube [720p].mp4",
"Velvet Revolver -Patience.mp4",
"\U5409\U4ed6",
"\U6742",
"\U77edLIVE",
"\U82f1\U96c4\U8054\U76df"
)
Program ended with exit code: 0
NSManager增删改查
- @autoreleasepool {
- NSFileManager *fm = [NSFileManager defaultManager];
- NSString *filePath = @"/Users/chingwei_macpc/Desktop/3.txt";
- NSString *subPath = @"/Users/chingwei_macpc/Desktop/music";
- NSString *createDir =@"/Users/chingwei_macpc/Desktop/aaa";
- NSString *filePath2 = @"/Users/chingwei_macpc/Desktop/aaa/nsmanager.txt";
- //创建文件
- //路径 2.YEs/NO在创建路径的时候如果没有此路径,自己创建,NO的情况之创建最后一个目录,若前一个没有,则会报错 3.属性
- BOOL isYes = [fm createDirectoryAtPath:createDirwithIntermediateDirectories:YESattributes:nilerror:nil];
- if (isYes) {
- NSLog(@"创建成功aaa目录成功");
- }
- else{
- NSLog(@"目录创建失败");
- }
- NSString *str =@"NSSmaanger创建文件";
- //nsdata 是一个处理二进制的数据的类
- NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
- isYes = [fm createFileAtPath:filePath2contents:dataattributes:nil];
- if (isYes) {
- NSLog(@"创建文件--->成功");
- }
- else{
- NSLog(@"创建文件失败");
- }
- //copy文件
- NSString *targetPath =@"/Users/chingwei_macpc/Desktop/aaa/3.txt";
- filePath = @"/Users/chingwei_macpc/Desktop/3.txt";
- isYes = [fm copyItemAtPath:filePath toPath:targetPatherror:nil];
- if (isYes) {
- NSLog(@"拷贝文件--->成功");
- }
- else{
- NSLog(@"拷贝文件--->失败");
- }
- //如何移动文件
- targetPath =@"/Users/chingwei_macpc/Desktop/aaa/4.txt";
- filePath = @"/Users/chingwei_macpc/Desktop/4.txt";
- isYes = [fm moveItemAtPath:filePath toPath:targetPatherror:nil];
- if (isYes) {
- NSLog(@"移动文件文件--->成功");
- }
- else{
- NSLog(@"移动文件--->失败");
- }
- //如何删除文件
- filePath = @"/Users/chingwei_macpc/Desktop/aaa/4.txt";
- isYes = [fm removeItemAtPath:targetPatherror:nil];
- if (isYes) {
- NSLog(@"删除文件--->成功");
- }
- else{
- NSLog(@"删除文件--->失败");
- }
- }
下载文件思路
发送请求给服务器,要求下载某个文件
服务器发出响应,返回文件数据
手机通过nsdata来存放服务器返回来的数据
利用NSFileManager将,NSData里面的文件数据写到心的文件中
CreateFileAtPath
IOS沙盒机制,以及路径获取方法
IOS应用程序只能访问自己的沙盒(应用沙盒就是文件系统目录,与其他应用的文件系统隔离)
百度音乐下载的歌曲无法通过网易音乐查看,ios的iTunes也无法访问
Preperences偏好设置文件,可以存储2个t的文件
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //沙盒根路径
- NSString *sandBoxPath = NSHomeDirectory();
- NSLog(@"%@",sandBoxPath);
- ///Users/chingwei_macpc
- //documents目录
- NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory,NSUserDomainMask ,YES);
- NSLog(@"%@",arrayPaths);
- /*(
- "/Users/chingwei_macpc/Library/Documentation"
- )*/
- NSString *documentPath = [arrayPaths firstObject];
- NSLog(@"%@",documentPath);
- NSString *documentPath2 = [arrayPathslastObject];
- NSLog(@"%@",documentPath2);
- //获取沙盒的NSLibraryDirectory
- arrayPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask ,YES);
- NSLog(@"%@",arrayPaths);
- // //在自己的沙盒路径创建一个文件
- NSString *str = [[arrayPaths lastObject]stringByAppendingString:@"Preferences/1.txt"];
- NSString *contents = @"abc";
- [str writeToFile:contents atomically:YESencoding:NSUTF8StringEncodingerror:nil];
- }
- return 0;
- 2016-01-05 20:41:48.791沙盒机制[954:60468] /Users/chingwei_macpc
- 2016-01-05 20:41:48.792沙盒机制[954:60468] (
- "/Users/chingwei_macpc/Library/Documentation"
- )
- 2016-01-05 20:41:48.793沙盒机制[954:60468] /Users/chingwei_macpc/Library/Documentation
- 2016-01-05 20:41:48.793沙盒机制[954:60468] /Users/chingwei_macpc/Library/Documentation
- 2016-01-05 20:41:48.793沙盒机制[954:60468] (
- "/Users/chingwei_macpc/Library"
- )
- Program ended with exit code: 0
- 常见的结构体
- @autoreleasepool {
- //NSPoint是CGPoint的别名
- NSPoint nsp ;
- CGPoint cgp ;
- nsp.x = 100 ;
- nsp.y = 200 ;
- cgp.x = 50 ;
- cgp.y = 50 ;
- NSPoint point2 = {10,20};
- CGPoint point1 = {20 ,30};
- //OC特有的赋值方式
- CGPoint c4 = CGPointMake(4,5);
- NSPoint np4 = NSMakePoint(5,6);
- //CGSize 和 NSSize表示平面的面积
- CGSize c5 = CGSizeMake(5,6);
- NSSize s4 = NSMakeSize(5,5);
- c5.width = 10 ;
- c5.height = 30;
- //表示平面上某个点的矩形区域 x , y, w, h
- CGRect r4 = CGRectMake(4,5, 6, 7);
- NSRect r2 = NSMakeRect(4,5, 6, 7);
- NSRect r6 = {{4,3},{5,6}};
- r4.origin.x= 0;
- r4.origin.y= 0 ;
- r4.size.height= 10;
- r4.size.width= 10 ;
- /*
- struct CGRect {
- CGPoint origin;
- CGSize size;
- };
- */
- //快速查看结构体的值
- NSLog(@"r4= %@",NSStringFromRect(r4));
- //2016-01-05 21:12:12.808 常见结构体[1039:83930]r1 = {{0, 0}, {10, 10}}
- //苹果官方推荐使用CG开头的
- }
- return 0;
- @autoreleasepool {
- //NSNumber 将int floatdouble包装成一个对象
- //好处将基本的数据类型的数据,保存到数组或字典中
- int a = 10 ;
- NSNumber *intObj = [NSNumber numberWithInt:a];
- NSMutableArray *array = [NSMutableArrayarrayWithObjects:intObj, nil];
- float f1 = 29.3f;
- NSNumber *floatObj = [NSNumber numberWithFloat:f1];
- [array addObject:floatObj];
- double d1 = 10.4;
- NSNumber *doubleObj = [NSNumber numberWithDouble:d1];
- [array addObject:doubleObj];
- NSNumber *n1 = array[0];
- int a1 = [n1 intValue];
- NSNumber *n2 = array[1];
- float f2 = [n2 floatValue];
- NSLog(@"a1+f2=%f",a1+f2);
- a1 = [array[0] intValue]+[array[1] floatValue];
- NSLog(@"a1=%d",a1);
- //NSNumber简写形式
- [array addObject:@(a)];
- [array addObject:@(f1)];
- [array addObject:@(a1)];
- [array addObject:@18];
- [array addObject:@20.4f];
- [array addObject:@9.4];
- [array addObject:@YES];
- NSLog(@"array=%@",array);
- NSComparisonResult r1 =[array[1] compare:array[0]];
- NSLog(@"r1= %ld",r1);
- }
- return 0;
- #import<Foundation/Foundation.h>
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //沙盒根路径
- NSString *sandBoxPath = NSHomeDirectory();
- NSLog(@"%@",sandBoxPath);
- ///Users/chingwei_macpc
- //documents目录
- NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory,NSUserDomainMask ,YES);
- NSLog(@"%@",arrayPaths);
- /*(
- "/Users/chingwei_macpc/Library/Documentation"
- )*/
- NSString *documentPath = [arrayPaths firstObject];
- NSLog(@"%@",documentPath);
- NSString *documentPath2 = [arrayPathslastObject];
- NSLog(@"%@",documentPath2);
- //获取沙盒的NSLibraryDirectory
- arrayPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask ,YES);
- NSLog(@"%@",arrayPaths);
- // //在自己的沙盒路径创建一个文件
- NSString *str = [[arrayPaths lastObject]stringByAppendingString:@"Preferences/1.txt"];
- NSString *contents = @"abc";
- [str writeToFile:contents atomically:YESencoding:NSUTF8StringEncodingerror:nil];
- }
- return 0;
2016-01-05 20:41:48.791沙盒机制[954:60468] /Users/chingwei_macpc
2016-01-05 20:41:48.792沙盒机制[954:60468] (
"/Users/chingwei_macpc/Library/Documentation"
)
2016-01-05 20:41:48.793沙盒机制[954:60468] /Users/chingwei_macpc/Library/Documentation
2016-01-05 20:41:48.793沙盒机制[954:60468] /Users/chingwei_macpc/Library/Documentation
2016-01-05 20:41:48.793沙盒机制[954:60468] (
"/Users/chingwei_macpc/Library"
)
Program ended with exit code: 0
常见的结构体
- @autoreleasepool {
- //NSPoint是CGPoint的别名
- NSPoint nsp ;
- CGPoint cgp ;
- nsp.x = 100 ;
- nsp.y = 200 ;
- cgp.x = 50 ;
- cgp.y = 50 ;
- NSPoint point2 = {10,20};
- CGPoint point1 = {20 ,30};
- //OC特有的赋值方式
- CGPoint c4 = CGPointMake(4,5);
- NSPoint np4 = NSMakePoint(5,6);
- //CGSize 和 NSSize表示平面的面积
- CGSize c5 = CGSizeMake(5,6);
- NSSize s4 = NSMakeSize(5,5);
- c5.width = 10 ;
- c5.height = 30;
- //表示平面上某个点的矩形区域 x , y, w, h
- CGRect r4 = CGRectMake(4,5, 6, 7);
- NSRect r2 = NSMakeRect(4,5, 6, 7);
- NSRect r6 = {{4,3},{5,6}};
- r4.origin.x= 0;
- r4.origin.y= 0 ;
- r4.size.height= 10;
- r4.size.width= 10 ;
- /*
- struct CGRect {
- CGPoint origin;
- CGSize size;
- };
- */
- //快速查看结构体的值
- NSLog(@"r4= %@",NSStringFromRect(r4));
- //2016-01-05 21:12:12.808 常见结构体[1039:83930]r1 = {{0, 0}, {10, 10}}
- //苹果官方推荐使用CG开头的
- }
- return 0;
- @autoreleasepool {
- //NSNumber 将int floatdouble包装成一个对象
- //好处将基本的数据类型的数据,保存到数组或字典中
- int a = 10 ;
- NSNumber *intObj = [NSNumber numberWithInt:a];
- NSMutableArray *array = [NSMutableArrayarrayWithObjects:intObj, nil];
- float f1 = 29.3f;
- NSNumber *floatObj = [NSNumber numberWithFloat:f1];
- [array addObject:floatObj];
- double d1 = 10.4;
- NSNumber *doubleObj = [NSNumber numberWithDouble:d1];
- [array addObject:doubleObj];
- NSNumber *n1 = array[0];
- int a1 = [n1 intValue];
- NSNumber *n2 = array[1];
- float f2 = [n2 floatValue];
- NSLog(@"a1+f2=%f",a1+f2);
- a1 = [array[0] intValue]+[array[1] floatValue];
- NSLog(@"a1=%d",a1);
- //NSNumber简写形式
- [array addObject:@(a)];
- [array addObject:@(f1)];
- [array addObject:@(a1)];
- [array addObject:@18];
- [array addObject:@20.4f];
- [array addObject:@9.4];
- [array addObject:@YES];
- NSLog(@"array=%@",array);
- NSComparisonResult r1 =[array[1] compare:array[0]];
- NSLog(@"r1= %ld",r1);
- }
- return 0;
- @autoreleasepool {
- //创建一个结构体变量
- CGPoint c1 = CGPointMake(4,2);
- //NSMutableArray*array1 = [NSMutableArray array];
- NSValue *v1 = [NSValue valueWithPoint:c1];
- //[array1addObject:v1];
- NSMutableArray *array1 = [NSMutableArrayarrayWithObjects:v1 , nil];
- CGRect r1 = CGRectMake(4, 4, 5, 5);
- NSValue *v2 = [NSValue valueWithRect:r1];
- [array1 addObject:v2];
- //接收一个rect的nsvalue
- NSValue *r1val = [array1 lastObject];
- NSRect r2 = [r1val rectValue];
- NSLog(@"r2 = %@",NSStringFromRect(r2));
- //一般结构体
- typedef structDate{
- int yeat ;
- int month ;
- int day ;
- }myDate;
- myDate mydate1 ={1989,12,07};
- //传送一个常量指针 后一句话作用把MyDate类型生成一个常量字符串描述
- NSValue *mydateVal = [NSValue valueWithBytes:&mydate1 objCType:@encode(myDate)];
- [array1 addObject:mydateVal];
- NSLog(@"array= %@",array1);
- //"<c5070000 0c000000 07000000>"
- //从数组中取出来的NSValue对象
- //在对象中,取出结构体变量的值
- //传入一个结构体变量的地址
- //getValue获取结构值,保存到结构体变量tmd
- myDate tmd ;
- [mydateVal getValue:&tmd];
- NSLog(@"tmd= %d,%d,%d",tmd.yeat,tmd.month,tmd.day);
- //2016-01-0522:50:59.585 NSValue[1423:127371] tmd = 1989,12,7
- }
- return 0;
- NSDate *date2 = [NSDatedate];
- NSLog(@"格林威治时间(默认时间)时间 %@",date2);//获取的时间是格林威治时间 0时区的
- //设置时区
- NSTimeZone * ntz = [NSTimeZone systemTimeZone];
- //设置时间间隔
- NSInteger interval = [ntz secondsFromGMTForDate:date2];
- //重新生成时间
- NSDate *localDate = [ date2 dateByAddingTimeInterval:interval];
- NSLog(@"当前日期:%@",localDate);
- //格式化日期
- NSDateFormatter *formatter = [NSDateFormatternew];
- formatter.dateFormat =@"yyyy年MM月dd日HH:mm:ss";
- NSString *dateStr = [formatter stringFromDate:date2];
- NSLog(@"当前时间 %@",dateStr);
- //计算日期
- NSTimeInterval t = 60*60*24;
- NSDate *tom = [NSDate dateWithTimeIntervalSinceNow:t];
- dateStr= [formatterstringFromDate:tom];
- NSLog(@"明天此刻时间 %@",dateStr);
- //计算昨天此刻时间
- t = -60*60*24;
- NSDate *yesterday = [date2 addTimeInterval:t];
- //'addTimeInterval:'is deprecated: first deprecated in OS X 10.6
- //过时的方法,可以使用NSDate dateWithTimeIntervalSinceNow:t]
- dateStr= [formatterstringFromDate:yesterday];
- NSLog(@"昨天此刻时间 %@",dateStr);
- //日期对象创建一个日历对象unit单元
- int unit =NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour;
- NSDate *c3 = [NSDate date];
- NSCalendar *ca1 = [NSCalendar currentCalendar];
- NSDateComponents *ndc1 = [ca1 components:unitfromDate:c3];
- NSLog(@"%ld年,%ld月,%ld日,%ld时,%ld分,%ld秒",ndc1.year,(long)ndc1.month,ndc1.day,ndc1.hour,ndc1.minute,ndc1.second);
- //2016年,1月,6日,2时,8分,1秒
- NSCalendar *cal = [NSCalendar currentCalendar];
- NSDateFormatter *formatter2 = [NSDateFormatternew];
- //一定要有这句
- formatter2.dateFormat=@"yyyy-MM-dd HH:mm:ss";
- NSString *time1 = @"2014-04-0820:20:23";
- NSString *time2 = @"2015-05-0821:23:23";
- NSDate *c1 = [formatter2 dateFromString:time1];
- NSDate *c2 = [formatter2 dateFromString:time2];
- NSLog(@"c1=%@,c2=%@\n",c1,c2);
- NSDateComponents *cms = [cal components:unitfromDate:c1 toDate:c2options:0];
- NSLog(@"相差%ld年,%ld月,%ld日,%ld时,%ld分,%ld秒",cms.year,cms.month,cms.day,cms.hour,cms.minute,cms.second);
- Person *p = [Personnew];
- NSMutableArray *arr = [[NSMutableArray alloc] init];
- [arr addObject:p];
- //[arr addObject:p];
- [arr removeObject:p];
- //如果对象从数组中移除,对象的引用计数器 -1
- NSLog(@"person.retainCount=%ld",p.retainCount);
- //数组被销毁
- [arr release];
- //array 数组中没有元素之后,对对象p没有影响
- [p release];
- //数组销毁的时候,对对象发送了一次release消息
- //销毁顺序,数组--->数组向其中的对象也发送release
- //当对象被添加到数组的时候,对象引用计数器 +1 remove开头的方法名对象,被移除的对象引用计数器 -1
- //当数组销毁的时候,集合/数组会向它其中的所有元素发送一次release消息
- //数组被销毁了,里面存储的对象不一定被销毁
使用copy会产生一个副本的过程。
修改源文件的内容,不会影响副本文件
修改副本的内容,不会影响源文件
oc的copy是指对象的拷贝。
作用:利用一个源对象产生一个副本对象
不可变对象,copy产生的对象也是不可变的
NSString产生的对象也只能用NSString接收
- Dog *d = [Dognew];
- //Dog *byd = [d copy];
- //copyWithZone错误
- NSString *str1 = @"abv";
- NSString *str2 = [str1 copy];
- NSLog(@"%@",str2);
- //可变对象产生的对象也是可变的
- //不管对象时否可变,只要使用mutableCopy的对象都是可变的
- NSMutableString *str4 = [str1 mutableCopy];
- [str4 appendString:@"xxxxxxx"];
- NSLog(@"%@",str4);
- /*
- *** Terminating app due to uncaught exception'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object withappendString:'
- */
- //copy不可变的
- NSMutableString *str5 = [str1 copy];
- [str5 appendString:@"xxxxxxx"];
- NSLog(@"%@",str5);
- }
Copy是浅复制mutableCopy是深复制
- #import<Foundation/Foundation.h>
- #import"Person.h"
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- Person *p = [Personnew];
- NSMutableString *str = [NSMutableStringstring];
- [strappendString:@"张无忌"];
- p.name = str;
- NSLog(@"p.name=%@",p.name);
- [strappendString:@"&&老顽童"];
- NSLog(@"p.name=%@",p.name);
- [p release];
- }
- return 0;
- }
- #import<Foundation/Foundation.h>
- @interface Person :NSObject
- //retain方式不能产生副本
- //@property(nonatomic,retain) NSString *name;
- @property (nonatomic,copy)NSString *name;
- @end
- #import"Person.h"
- @implementation Person
- - (void)dealloc
- {
- [_namerelease];
- NSLog(@"Person对象释放");
- [superdealloc];
- }
- @end
因为setName内部是copy计数器加1所以dealloc的方法需要release一次
为自定义类使用copy,遵守NSCopying协议
实现copywithzone方法,返回值是id类型,需要返回一个对象的副本
如果对象没有可变或者不可变区别,的情况,只需要实现copywithzone方法。
copywithzone的参数zone可以不去理会,历史问题
改变对象1的同时会改变对象2
在copyWithZone中修改如下
自定义的对象copy都是深复制
- #import<Foundation/Foundation.h>
- #import"Person.h"
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- Person *p = [Personnew];
- p.tuiNum = 10;
- p.speed = 100;
- Person *p1 = [p copy];
- p1.tuiNum =100;
- p1.speed = 300;
- NSLog(@"p.tuiNum =%d,p.speed = %d;",p.tuiNum,p.speed);
- NSLog(@"p1.tuiNum =%d,p1.speed = %d;",p1.tuiNum,p1.speed);
- }
- return 0;
- }
- #import<Foundation/Foundation.h>
- @interface Person :NSObject<NSCopying>
- @property(nonatomic,assign)int tuiNum;
- @property(nonatomic,assign)int speed ;
- //@property(nonatomic,copy)
- @end
- #import"Person.h"
- @implementation Person
- - (id)copyWithZone:(nullableNSZone *)zone{
- NSLog(@"执行了copy方法");
- Person *d = [[Person alloc] init];
- d.speed =self.speed;
- d.tuiNum =self.tuiNum;
- return d;
- }
- @end
单例模式
单例模式下,一个类中设定了值所有类都能获取到
- #import<Foundation/Foundation.h>
- #import"Tools.h"
- #import"Person.h"
- #import"Cat.h"
- #import"Dog.h"
- int main(intargc,const char* argv[]) {
- @autoreleasepool {
- //对象在任何时候,都只有一个,好处是,在多个类之间共享数据
- //设计要点:
- //1.保证唯一,程序运行期间必须唯一
- //2.单例类,必须提供一个接入点,特殊的类方法
- Person *p = [Personnew];
- [p run];
- Dog *d = [Dognew];
- [d run];
- Cat *c = [Catnew];
- [c eat];
- }
- return 0;
- }
- #import<Foundation/Foundation.h>
- @interfaceTools :NSObject<NSCopying>//继承NSCopying协议
- @property (nonatomic,assign)int num ;
- @property (nonatomic,copy)NSString *text;
- //提供一个接入点类方法
- +(instancetype)shareInstances;
- @end
- #import"Tools.h"
- //定义一个全局变量
- Tools *instances =nil;
- @implementationTools
- +(instancetype)shareInstances{
- //目的:保证对象必须唯一
- if(instances ==nil){
- //创建一个对象
- instances = [[Tools alloc] init];
- return instances;
- }
- return instances ;
- }
- +(id)allocWithZone:(struct_NSZone *)zone{
- @synchronized(self) {//同一个时间只准一个对象访问,线程保护
- if (instances== nil) {
- instances = [super allocWithZone:zone];
- return instances;
- }
- }
- return instances;
- }
- -(id)copyWithZone:(nullableNSZone *)zone{
- returnself ;//并没有copy直接return self
- }
- -(id)retain{
- return self;
- }
- -(NSUInteger)retainCount{
- return NSUIntegerMax;
- }
- -(onewayvoid)release{
- }
- -(id)autorelease{
- return self;
- }
- @end
- #import<Foundation/Foundation.h>
- @interface Person :NSObject
- -(void)run;
- @end
- #import"Person.h"
- #import"Tools.h"
- @implementation Person
- -(void)run{
- Tools *toolPerson = [Tools shareInstances];
- //NSLog(@"toolPerson=%d,toolPerson=%@",toolPerson.num,toolPerson.text);
- toolPerson.num = 10 ;
- toolPerson.text =@"heima";
- //设置
- }
- @end
- #import<Foundation/Foundation.h>
- @interface Dog :NSObject
- -(void)run;
- @end
- #import"Dog.h"
- #import"Tools.h"
- @implementation Dog
- -(void)run{
- Tools *toolDog = [Tools shareInstances];
- NSLog(@"toolDog=%d,toolDog=%@",toolDog.num,toolDog.text);
- //设置
- toolDog.num = 12 ;
- toolDog.text =@"oooddddd";
- }
- @end
- #import<Foundation/Foundation.h>
- @interface Cat :NSObject
- -(void)eat;
- @end
- #import"Cat.h"
- #import"Tools.h"
- @implementation Cat
- -(void)eat{
- Tools *toolCat = [[Toolsalloc]init];
- //需要重新alloc才不会创建新的对象
- // Tools*toolCat = [Tools shareInstances];
- NSLog(@"toolCat=%d,toolCat=%@",toolCat.num,toolCat.text);
- }
- @end<span style="font-family: Calibri;font-size:18px; background-color: rgb(255, 255, 255);"> </span>
- 框架:由许多类,方法,函数和文档按照一定逻辑组织起来的集合
- 类里面的方法要按照一定规则来写
- 集合存储学生类(有姓名和成绩两个属性), 按照姓名由前到后、成绩由低到高的顺序输出
- Flex中如何利用setInterval()和clearInterval()函数按照一定时间有规则的执行函数的例子
- STL集合容器set按照由小到大或者由大到小的顺序存放元素
- linux 下 C 编程和make的方法 (三、工程文档的组织)
- linux 下 C 编程和make的方法 (三、工程文档的组织)
- 为什么说win的分区是由fat表组织的,而linux的分区是按照块的方式组织的?
- 按照一定的格式生成Bean
- 将日期按照一定的格式转化
- 文件的逻辑组织与物理组织
- 调试逻辑错误由一些方法和技巧
- 用Set集合,按照字符串的长度排序的方法
- 重新组织函数的九种方法
- Java中集合List按照集合内实体类元素的指定字段排序方法
- java集合框架-List和Set和相关的方法
- 【ulua入门】(1) 让lua跑起来,然后利用框架,写自己的逻辑
- 语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当
- Android UI性能优化实战 识别绘制中的性能问题
- android studio使用fragment标签出错:E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException:
- 148. Sort List
- 对象内存管理
- 数据库设计范式(转自知乎)
- 框架:由许多类,方法,函数和文档按照一定逻辑组织起来的集合
- 使用IBM Bluemix Blockchain Service在 Blockchain Network 开发 chaincode
- 顺序表应用1:多余元素删除之移位算法
- mongodb
- SpringMVC使用(4) 数据绑定
- Nutch
- 【算法题】找出且仅有的出现了奇数次的一个数
- 小端和大端
- mysql同时执行多个sql操作在项目中的运用