gpt4 book ai didi

objective-c - 在 Objective C (Cocoa) 中设置环境变量的惯用方法是什么

转载 作者:行者123 更新时间:2023-12-03 17:21:08 28 4
gpt4 key购买 nike

found 获取环境变量的惯用答案,我可以将其概括为:

NSString *key = @"<whatever>";
NSString *result;
result = [[[NSProcessInfo processInfo]environment]objectForKey:key];

但是设置环境变量的惯用方法是什么?我从docs看到environment 字典是一个只读的 NSDictionary 对象,而不是 NSMutableDictionary 或其他一些允许我执行以下操作的特殊类setObject:forKey:。 (事实上​​,如果我以这种方式强制类型,它不会产生明显的效果。)

我可以使用标准 UNIX (*nix) 方式:

char *key = "<whatever>", *value = "<something>";
int overwrite = 1;
setenv(key, value, overwrite);

如果这是我需要做的,我就会这么做。我只是想知道,是否有一种惯用的 Objective-C 方法可以做到这一点,这是不同的,而我只是找不到?我喜欢尽可能以推荐的方式做事,在我看来,这意味着使用 Objective-C 类……如果有一个类可以做到这一点的话。其他人是如何做到这一点的?

(无论如何,我的下一步将是使用修改后的环境执行程序。)

最佳答案

啊,但是当然。我希望我首先查找启动流程的惯用方式,因为这就是我的答案。使用 NSTask,我可以访问 setEnvironment:方法。所以,对我有用的是这样的:

NSTask *myTask = [[NSTask alloc] init];
myTask.launchPath = @"/path/to/something";

NSMutableDictionary *env = [[NSMutableDictionary alloc] init];

// optionally copy in existing environment first:
// (we could also copy values for a limited set of specific keys, if we wanted.)
[env addEntriesFromDictionary:[[NSProcessInfo processInfo] environment]];
// then add anything else we might want:
[env setObject:@"test value" forKey:@"TEST_VAR"];
// and maybe delete things we don't want:
[env removeObjectForKey:@"UNWANTED_VAR"];

// now set the task up to use this newly-built environment:
[myTask setEnvironment:env];
// and run it in whatever way makes sense:
[myTask launch];
[myTask waitUntilExit];

从那里,我们在修改后的环境中运行我们的程序。

我仍然不知道是否/如何以惯用的方式改变运行过程的环境,所以如果有人有这个答案,我想听听它,但出于我的主要目的,这将够了。

关于objective-c - 在 Objective C (Cocoa) 中设置环境变量的惯用方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27139589/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com