博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS开发基础知识--碎片16
阅读量:6855 次
发布时间:2019-06-26

本文共 8660 字,大约阅读时间需要 28 分钟。

 

1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)

 

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。判断对象类型-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例实例一:   Person *person = [[Person alloc] init];      //父类   Teacher *teacher = [[Teacher alloc] init];  //子类        //YES      if ([teacher isMemberOfClass:[Teacher class]]) {          NSLog(@"teacher Teacher类的成员");     }     //NO      if ([teacher isMemberOfClass:[Person class]]) {         NSLog(@"teacher Person类的成员");     }     //NO      if ([teacher isMemberOfClass:[NSObject class]]) {         NSLog(@"teacher NSObject类的成员");     }  实例二:Person *person = [[Person alloc] init];  Teacher *teacher = [[Teacher alloc] init];    //YES   if ([teacher isKindOfClass:[Teacher class]]) {      NSLog(@"teacher 是 Teacher类或Teacher的子类");  }  //YES   if ([teacher isKindOfClass:[Person class]]) {      NSLog(@"teacher 是 Person类或Person的子类");  }  //YES   if ([teacher isKindOfClass:[NSObject class]]) {      NSLog(@"teacher 是 NSObject类或NSObject的子类");  }  isMemberOfClass判断是否是属于这类的实例,是否跟父类有关系他不管,所以isMemberOfClass指到父类时才会为NO;对方法进行判断:-(BOOL) respondsToSelector: selector 判读实例是否有这样方法+(BOOL) instancesRespondToSelector:  判断类是否有这个方法。此方法是类方法,不能用在类的对象实例三:// YES   teacher是对象if ( [teacher respondsToSelector: @selector( setName: )] == YES ) {      NSLog(@"teacher responds to setSize: method" );  } // YES   Teacher是类if ( [Teacher instancesRespondToSelector: @selector(teach)] == YES ) {      NSLog(@"Teacher instance responds to teach method");  }

2:IOS 开发中判断字符串是否为空字符的方法

- (BOOL) isBlankString:(NSString *)string {    if (string == nil || string == NULL) {        return YES;    }    if ([string isKindOfClass:[NSNull class]]) {        return YES;    }    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {        return YES;    }    return NO;}

3:删除Caches文件夹的内容

// 文件管理者NSFileManager *mgr = [NSFileManager defaultManager];// 缓存路径NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];[mgr removeItemAtPath:caches error:nil];

4:计算某个文件夹或文件的大小

/** *  @ 15-06-17 09:06:22 * *  @brief  计算文件或文件夹的大小 因为osx 文件夹是没有大小这个属性 要通过各个文件计算得到 subpathsAtPath可以获得文件夹下面所有的文件 包含子文件夹里面 *  @param filePath 比如缓存caches的路径 *  @return 大小 */- (NSInteger)fileSize:(NSString *)filePath{    NSFileManager *mgr = [NSFileManager defaultManager];    // 判断是否为文件    BOOL dir = NO;    BOOL exists = [mgr fileExistsAtPath:filePath isDirectory:&dir];    // 文件\文件夹不存在    if (exists == NO) return 0;        if (dir) { // self是一个文件夹        // 遍历caches里面的所有内容 --- 直接和间接内容        NSArray *subpaths = [mgr subpathsAtPath:filePath];        NSInteger totalByteSize = 0;        for (NSString *subpath in subpaths) {            // 获得全路径            NSString *fullSubpath = [filePath stringByAppendingPathComponent:subpath];            // 判断是否为文件            BOOL dir = NO;            [mgr fileExistsAtPath:fullSubpath isDirectory:&dir];            if (dir == NO) { // 文件                totalByteSize += [[mgr attributesOfItemAtPath:fullSubpath error:nil][NSFileSize] integerValue];            }        }        return totalByteSize;    } else { // 是一个文件        return [[mgr attributesOfItemAtPath:filePath error:nil][NSFileSize] integerValue];    }}调用传入下面的路径:NSFileManager *mgr = [NSFileManager defaultManager];// 缓存路径NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

5:文件操作(NSFileManager)iOS (转)

iOS的沙盒机制,应用只能访问自己应用目录下的文件。iOS不像android,没有SD 卡概念,不能直接访问图像、视频等内容。iOS应用产生的内容,如图像、文件、缓存内容等都必须存储在自己的沙盒内。默认情况下,每个沙盒含有3个文件 夹:Documents, Library 和 tmp。Library包含Caches、Preferences目录。Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录Library:存储程序的默认设置或其它状态信息;Library/Caches:存放缓存文件,保存应用的持久化数据,用于应用升级或者应用关闭后的数据保存,不会被itunes同步,所以为了减少同步的时间,可以考虑将一些比较大的文件而又不需要备份的文件放到这个目录下。tmp:提供一个即时创建临时文件的地方,但不需要持久化,在应用关闭后,该目录下的数据将删除,也可能系统在程序不运行的时候清除。a:获取应用沙盒根路径:-(void)dirHome{      NSString *dirHome=NSHomeDirectory();          NSLog(@"app_home: %@",dirHome);  } b:获取Documents目录路径: -(NSString *)dirDoc{      //[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);      NSString *documentsDirectory = [paths objectAtIndex:0];      NSLog(@"app_home_doc: %@",documentsDirectory);      return documentsDirectory;  }  c:获取Library目录路径:-(void)dirLib{      //[NSHomeDirectory() stringByAppendingPathComponent:@"Library"];      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);      NSString *libraryDirectory = [paths objectAtIndex:0];      NSLog(@"app_home_lib: %@",libraryDirectory);  }  d:获取Cache目录路径:-(void)dirCache{      NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);      NSString *cachePath = [cacPath objectAtIndex:0];      NSLog(@"app_home_lib_cache: %@",cachePath);  } e:获取Tmp目录路径:-(void)dirTmp{      //[NSHomeDirectory() stringByAppendingPathComponent:@"tmp"];      NSString *tmpDirectory = NSTemporaryDirectory();      NSLog(@"app_home_tmp: %@",tmpDirectory);  }  f:创建文件夹:-(void *)createDir{      NSString *documentsPath =[self dirDoc];      NSFileManager *fileManager = [NSFileManager defaultManager];      NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];      // 创建目录      BOOL res=[fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];      if (res) {          NSLog(@"文件夹创建成功");      }else          NSLog(@"文件夹创建失败");   } g:创建文件-(void *)createFile{      NSString *documentsPath =[self dirDoc];      NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];      NSFileManager *fileManager = [NSFileManager defaultManager];      NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];      BOOL res=[fileManager createFileAtPath:testPath contents:nil attributes:nil];      if (res) {          NSLog(@"文件创建成功: %@" ,testPath);      }else          NSLog(@"文件创建失败");  } h:写数据到文件:-(void)writeFile{      NSString *documentsPath =[self dirDoc];      NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];      NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];      NSString *content=@"测试写入内容!";      BOOL res=[content writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil];      if (res) {          NSLog(@"文件写入成功");      }else          NSLog(@"文件写入失败");  }  i:读文件数据:-(void)readFile{      NSString *documentsPath =[self dirDoc];      NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];      NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];  //    NSData *data = [NSData dataWithContentsOfFile:testPath];  //    NSLog(@"文件读取成功: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);      NSString *content=[NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil];      NSLog(@"文件读取成功: %@",content);  }  j:文件属性:-(void)fileAttriutes{      NSString *documentsPath =[self dirDoc];      NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];      NSFileManager *fileManager = [NSFileManager defaultManager];      NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];      NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:testPath error:nil];         NSArray *keys;      id key, value;      keys = [fileAttributes allKeys];      int count = [keys count];      for (int i = 0; i < count; i++)      {          key = [keys objectAtIndex: i];          value = [fileAttributes objectForKey: key];          NSLog (@"Key: %@ for value: %@", key, value);      }  }  k:删除文件:-(void)deleteFile{      NSString *documentsPath =[self dirDoc];      NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];      NSFileManager *fileManager = [NSFileManager defaultManager];      NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];         BOOL res=[fileManager removeItemAtPath:testPath error:nil];      if (res) {          NSLog(@"文件删除成功");      }else          NSLog(@"文件删除失败");         NSLog(@"文件是否存在: %@",[fileManager isExecutableFileAtPath:testPath]?@"YES":@"NO");  }

 

6:iOS自动化打包之在Xcode8.2.1之上没有PackageApplication指令的解决方法

下载 PackageApplication 命令

地址:资源地址稍后填上,因为上传到CSDN之后,有延时
右键 Xcode.app -> 显示包内容 -> Contents -> Developer -> platforms -> iPhoneOS.platform -> Developer -> usr -> bin,进入这个目录之后,将下载的PackageApplication复制到这个目录,然后执行:chmod +x PackageApplication
OK

转载地址:http://ppyyl.baihongyu.com/

你可能感兴趣的文章
ACM 要学
查看>>
C++之:模板元编程(二) 模板形参
查看>>
甲骨文宣布正式介入存储业务 超融合架构须基于对业务的深刻了解
查看>>
[华为机试练习题]25.圆桌游戏
查看>>
Android学习笔记(16):绝对布局AbsoluteLayout、常用距离单位
查看>>
[华为机试真题]66.单词搜索
查看>>
[From My Companion]memmem
查看>>
Magento--给EAV模型新增非EAV属性
查看>>
ASP.NET 系统支持数据库访问设计
查看>>
Use OpenVSwitch & bridge & Docker & pipework fast build complicated testing ENV
查看>>
一分钟了解阿里云产品:阿里云免费企业邮箱特点介绍及免费申请过程
查看>>
Linux查找find命令详解
查看>>
客户案例—北京优络时代科技有限公司
查看>>
runc 1.0-rc7 发布之际
查看>>
AutoNet-ios (ios 强大好用的网络框架, 加入了新的拦截器概念)
查看>>
微信小程序 wx.request 的封装
查看>>
js学习总结
查看>>
iOS开发 iOS9 Spotlight 应用内搜索简单介绍
查看>>
分享:你会写一个vue的双向数据绑定吗?
查看>>
微信支付(公众号支付JSAPI)
查看>>