【IOS 开发学习总结-OC-35】★文件 I/O——NSPathUtilities.h管理路径+NSProcessInfo获取进程信息

来源:互联网 发布:linux制作iso镜像文件 编辑:程序博客网 时间:2024/05/10 14:27

NSPathUtilities.h管理路径

NSPathUtilities.h包含了对 NSString 类的扩展,从而为 NSString 类新增了一些专门用于操作路径的方法。——主要作用是更方便地操作路径。

对 NSString 类扩展了如下方法:

  1. + (NSString *)pathWithComponents:(NSArray<NSString *> *)components;——根据components中的元素构造有效的路径
  2. pathComponents:——分拆路径,返回该路径中各部分所组成的数组;
  3. isAbsolutePath——判断该路径是否为绝对路径;
  4. lastPathComponent——提取该路径的最后偶一个组成部分。
  5. pathExtension——从路径最后一个组成部分提取扩展名。
  6. stringByDeletingLastPathComponent——删除路径最后一个组成部分
  7. stringByAppendingPathComponent——将 path 添加到现有路径的结尾处
  8. stringByDeletingPathExtension——删除路径最后一个组成部分的扩展名
  9. - (nullable NSString *)stringByAppendingPathExtension:(NSString *)str;——将指定扩展名添加到现有路径的结尾处
  10. ⭐️ stringByAbbreviatingWithTildeInPath——将路径中当前用户的 home 路径替换为~;将路径中指定 当前用户的 home 路径替换为~user的形式。
  11. stringByExpandingTildeInPath——将路径中的代字符(~或~user)解析成当前用户的 home 目录或 指定用户的 home 目录。
  12. stringByStandardizingPath——解析路径中的~,..,.和符号连接,返回解析后生成的 标准路径。
  13. stringByResolvingSymlinksInPath——解析路径中的符号链接,返回解析后的路径

NSPathUtilities.h包含的获取系统相关属性的函数

  1. NSUserName():返回当前用户名;
  2. NSFullUserName( ):返回当前用户的完整用户名;
  3. NSHomeDirectory():返回当前用户的home目录
  4. NSHomeDirectoryForUser(NSString * __nullable userName):返回指定用户的 Home 目录;
  5. NSOpenStepRootDirectory():返回系统的临时目录。

示例代码:

#import <Foundation/Foundation.h>int main(int argc , char * argv[]){    @autoreleasepool{        NSLog(@"当前用户名为:%@" , NSUserName());        NSLog(@"当前用户的完整用户名为:%@" , NSFullUserName());        NSLog(@"当前用户的home目录为:%@" , NSHomeDirectory());        NSLog(@"root用户的home目录为:%@" ,             NSHomeDirectoryForUser(@"root"));        NSLog(@"系统临时目录为:%@" ,             NSTemporaryDirectory());        NSString* path = @"~root";        // 将~root解析成root用户的home目录        NSLog(@"解析~root的结果:%@" ,            [path stringByExpandingTildeInPath]);        NSString* path2 = @"/Users/yeeku/publish";        // 将会输出~/publish        NSLog(@"替换成~的形式:%@" ,            [path2 stringByAbbreviatingWithTildeInPath]);        NSArray* array = [path2 pathComponents];        // 遍历该路径中包含的各路径组件        for(NSString* item in array)        {            NSLog(@"%@" , item);        }        // 在path2路径后追加一个路径        NSString* path3 = [path2 stringByAppendingPathComponent:@"abc.m"];        NSLog(@"path3为:%@" , path3);         // 获取路径的最后部分        NSString* last = [path3 lastPathComponent];        NSLog(@"path3的最后一个路径组件为:%@" , last);        // 获取路径的最后部分的扩展名        NSLog(@"path3的最后一个路径的扩展名为:%@" ,             [path3 pathExtension]);         }}

运行结果:

2015-10-07 09:21:26.157 1005[1176:33760] 当前用户名为:2015-10-07 09:21:26.159 1005[1176:33760] 当前用户的完整用户名为:2015-10-07 09:21:26.160 1005[1176:33760] 当前用户的home目录为:/Users/Halbert/Library/Developer/CoreSimulator/Devices/8360160E-C79D-4240-8D67-1EF554BC23BF/data/Containers/Data/Application/626CC5FD-4D91-44A6-A6C4-1A8EBE6BC6B72015-10-07 09:21:26.160 1005[1176:33760] root用户的home目录为:/Users/Halbert/Library/Developer/CoreSimulator/Devices/8360160E-C79D-4240-8D67-1EF554BC23BF/data/Containers/Data/Application/626CC5FD-4D91-44A6-A6C4-1A8EBE6BC6B72015-10-07 09:21:26.160 1005[1176:33760] 系统临时目录为:/Users/Halbert/Library/Developer/CoreSimulator/Devices/8360160E-C79D-4240-8D67-1EF554BC23BF/data/Containers/Data/Application/626CC5FD-4D91-44A6-A6C4-1A8EBE6BC6B7/tmp/2015-10-07 09:21:26.161 1005[1176:33760] 解析~root的结果:/Users/Halbert/Library/Developer/CoreSimulator/Devices/8360160E-C79D-4240-8D67-1EF554BC23BF/data/Containers/Data/Application/626CC5FD-4D91-44A6-A6C4-1A8EBE6BC6B72015-10-07 09:21:26.162 1005[1176:33760] 替换成~的形式:/Users/yeeku/publish2015-10-07 09:21:26.227 1005[1176:33760] /2015-10-07 09:21:26.227 1005[1176:33760] Users2015-10-07 09:21:26.227 1005[1176:33760] yeeku2015-10-07 09:21:26.228 1005[1176:33760] publish2015-10-07 09:21:26.228 1005[1176:33760] path3为:/Users/yeeku/publish/abc.m2015-10-07 09:21:26.228 1005[1176:33760] path3的最后一个路径组件为:abc.m2015-10-07 09:21:26.229 1005[1176:33760] path3的最后一个路径的扩展名为:m

ProcessInfo获取进程信息

当一个程序运行起来后就变成了一个进程,NSProcessInfo对象可用于获取该进程的相关信息。此外,还可以获取该进程所在系统的主机名,操作系统名,操作系统版本等信息。

ProcessInfo对象的创建很简单,程序调用ProcessInfo的 processInfo类方法即可获取该进程对应的ProcessInfo对象,然后就可以调用ProcessInfo的方法获取该进程,及进程所在系统的信息:

  1. arguments:返回运行该程序所传入的参数组成的 NSArray 对象;
  2. environment:返回系统内所有环境变量名和值组成的 NSDictionary 对象。
  3. hostName:返回该进程所在系统的主机名;
  4. processName:返回进程名;
  5. processIdentifier:返回进程的标识符;
  6. globallyUniqueString:返回一个全局的,唯一的字符串;
  7. operatingSystem:返回操作系统;
  8. operatingSystemName:返回操作系统名;
  9. operatingSystemVersionString:返回系统版本号的字符串;
  10. operatingSystemVersion:返回系统版本
  11. processorCount:返回处理器数量;
  12. activeProcessorCount:返回激活状态的处理器数量;
  13. physicalMemory:返回系统的物理内存;
  14. systemUptime:系统已运行的时间;

示例代码:

#import <Foundation/Foundation.h>int main(int argc , char * argv[]){    @autoreleasepool{        // 获取当前进程对应的ProcessInfo对象        NSProcessInfo* proInfo = [NSProcessInfo processInfo];        // 获取运行该程序所指定的参数        NSArray* arr = [proInfo arguments];         NSLog(@"运行程序的参数为:%@" , arr);        NSLog(@"进程标识符为:%d" ,[proInfo processIdentifier]);        NSLog(@"进程的进程名为:%@" ,[proInfo processName]);        NSLog(@"进程所在系统的主机名为:%@" , [proInfo hostName]);        NSLog(@"进程所在系统的操作系统为:%ld" , [proInfo operatingSystem]);        NSLog(@"进程所在系统的操作系统名为:%@" , [proInfo operatingSystemName]);        NSLog(@"进程所在系统的操作系统版本字符串为:%@", [proInfo operatingSystemVersionString]);        NSLog(@"进程所在系统的物理内存为:%lld", [proInfo physicalMemory]);        NSLog(@"进程所在系统的处理器数量为:%ld" , [proInfo processorCount]);        NSLog(@"进程所在系统的激活的处理器数量为:%ld" , [proInfo activeProcessorCount]);        NSLog(@"进程所在系统的运行时间为:%f", [proInfo systemUptime]);    }}

运行结果:

2015-10-07 10:52:03.245 1005[1410:68262] 运行程序的参数为:(    "/Users/Halbert/Library/Developer/CoreSimulator/Devices/8360160E-C79D-4240-8D67-1EF554BC23BF/data/Containers/Bundle/Application/DACF3DBF-0669-4BFB-99B4-250916EB7AAE/1005.app/1005")2015-10-07 10:52:03.247 1005[1410:68262] 进程标识符为:14102015-10-07 10:52:03.247 1005[1410:68262] 进程的进程名为:10052015-10-07 10:52:03.261 1005[1410:68262] 进程所在系统的主机名为:hanxinyuandemacbook-air.local2015-10-07 10:52:03.261 1005[1410:68262] 进程所在系统的操作系统为:52015-10-07 10:52:03.262 1005[1410:68262] 进程所在系统的操作系统名为:NSMACHOperatingSystem2015-10-07 10:52:03.294 1005[1410:68262] 进程所在系统的操作系统版本字符串为:Version 9.0 (Build 13A340)2015-10-07 10:52:03.294 1005[1410:68262] 进程所在系统的物理内存为:42949672962015-10-07 10:52:03.295 1005[1410:68262] 进程所在系统的处理器数量为:42015-10-07 10:52:03.295 1005[1410:68262] 进程所在系统的激活的处理器数量为:42015-10-07 10:52:03.296 1005[1410:68262] 进程所在系统的运行时间为:11344.116244

特别指出的是,上面的一些方法已经被 IOS8以后的 新系统弃用,上图:
这里写图片描述

问题解惑:argv 与NSProcessInfo获取参数的区别?

argv获取的程序参数是 C风格的字符串,而通过NSProcessInfo 获取的参数则是 NSString 对象组成的NSArray数组。——这样就可以直接面向 objective-c 的 API编程。

0 0
原创粉丝点击