NSPathUtilities.h包含了对 NSString 类的扩展,从而为 NSString 类新增了一些专门用于操作路径的方法。——主要作用是更方便地操作路径。
+ (NSString *)pathWithComponents:(NSArray *)components;
——根据components中的元素构造有效的路径pathComponents:
——分拆路径,返回该路径中各部分所组成的数组;isAbsolutePath
——判断该路径是否为绝对路径;lastPathComponent
——提取该路径的最后偶一个组成部分。pathExtension
——从路径最后一个组成部分提取扩展名。stringByDeletingLastPathComponent
——删除路径最后一个组成部分stringByAppendingPathComponent
——将 path 添加到现有路径的结尾处stringByDeletingPathExtension
——删除路径最后一个组成部分的扩展名- (nullable NSString *)stringByAppendingPathExtension:(NSString *)str;
——将指定扩展名添加到现有路径的结尾处stringByAbbreviatingWithTildeInPath
——将路径中当前用户的 home 路径替换为~;将路径中指定 当前用户的 home 路径替换为~user的形式。stringByExpandingTildeInPath
——将路径中的代字符(~或~user)解析成当前用户的 home 目录或 指定用户的 home 目录。stringByStandardizingPath
——解析路径中的~
,..
,.
和符号连接,返回解析后生成的 标准路径。stringByResolvingSymlinksInPath
——解析路径中的符号链接,返回解析后的路径NSUserName()
:返回当前用户名;NSFullUserName( )
:返回当前用户的完整用户名;NSHomeDirectory()
:返回当前用户的home目录NSHomeDirectoryForUser(NSString * __nullable userName)
:返回指定用户的 Home 目录;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
当一个程序运行起来后就变成了一个进程,NSProcessInfo对象可用于获取该进程的相关信息。此外,还可以获取该进程所在系统的主机名,操作系统名,操作系统版本等信息。
ProcessInfo对象的创建很简单,程序调用ProcessInfo的 processInfo类方法即可获取该进程对应的ProcessInfo对象,然后就可以调用ProcessInfo的方法获取该进程,及进程所在系统的信息:
arguments
:返回运行该程序所传入的参数组成的 NSArray 对象;environment
:返回系统内所有环境变量名和值组成的 NSDictionary 对象。hostName
:返回该进程所在系统的主机名;processName
:返回进程名;processIdentifier
:返回进程的标识符;globallyUniqueString
:返回一个全局的,唯一的字符串;operatingSystem
:返回操作系统;operatingSystemName
:返回操作系统名;operatingSystemVersionString
:返回系统版本号的字符串;operatingSystemVersion
:返回系统版本processorCount
:返回处理器数量;activeProcessorCount
:返回激活状态的处理器数量;physicalMemory
:返回系统的物理内存;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以后的 新系统弃用,上图:
argv获取的程序参数是 C风格的字符串,而通过NSProcessInfo 获取的参数则是 NSString 对象组成的NSArray数组。——这样就可以直接面向 objective-c 的 API编程。