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

NSPathUtilities.h管理路径

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

对 NSString 类扩展了如下方法:

  1. + (NSString *)pathWithComponents:(NSArray *)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 

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-1A8EBE6BC6B7
2015-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-1A8EBE6BC6B7
2015-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-1A8EBE6BC6B7
2015-10-07 09:21:26.162 1005[1176:33760] 替换成~的形式:/Users/yeeku/publish
2015-10-07 09:21:26.227 1005[1176:33760] /
2015-10-07 09:21:26.227 1005[1176:33760] Users
2015-10-07 09:21:26.227 1005[1176:33760] yeeku
2015-10-07 09:21:26.228 1005[1176:33760] publish
2015-10-07 09:21:26.228 1005[1176:33760] path3为:/Users/yeeku/publish/abc.m
2015-10-07 09:21:26.228 1005[1176:33760] path3的最后一个路径组件为:abc.m
2015-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 

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] 进程标识符为:1410
2015-10-07 10:52:03.247 1005[1410:68262] 进程的进程名为:1005
2015-10-07 10:52:03.261 1005[1410:68262] 进程所在系统的主机名为:hanxinyuandemacbook-air.local
2015-10-07 10:52:03.261 1005[1410:68262] 进程所在系统的操作系统为:5
2015-10-07 10:52:03.262 1005[1410:68262] 进程所在系统的操作系统名为:NSMACHOperatingSystem
2015-10-07 10:52:03.294 1005[1410:68262] 进程所在系统的操作系统版本字符串为:Version 9.0 (Build 13A340)
2015-10-07 10:52:03.294 1005[1410:68262] 进程所在系统的物理内存为:4294967296
2015-10-07 10:52:03.295 1005[1410:68262] 进程所在系统的处理器数量为:4
2015-10-07 10:52:03.295 1005[1410:68262] 进程所在系统的激活的处理器数量为:4
2015-10-07 10:52:03.296 1005[1410:68262] 进程所在系统的运行时间为:11344.116244

特别指出的是,上面的一些方法已经被 IOS8以后的 新系统弃用,上图:
【IOS 开发学习总结-OC-35】★文件 I/O——NSPathUtilities.h管理路径+NSProcessInfo获取进程信息_第1张图片

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

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

你可能感兴趣的:(ios开发)