gpt4 book ai didi

objective-c - 将 NSArray 内容转换为可变参数(使用 ARC)以与 NSString initWithFormat 一起使用

转载 作者:太空狗 更新时间:2023-10-30 03:20:45 26 4
gpt4 key购买 nike

我们今天有一些代码接受 NSArray 并将其作为参数列表传递给 -[NSString initWithFormat:arguments] 我们正试图让它与 ARC 一起工作。这是使用的代码

NSString* format = @"Item %s and Item %s"; // Retrieved elsewhere
NSArray* args = [NSArray arrayWithObjects:@"1", @"2", nil]; // Retrieved elsewhere

// http://cocoawithlove.com/2009/05/variable-argument-lists-in-cocoa.html
char* argsList = (char*) malloc(sizeof(NSString*) * args.count);
[args getObjects:(id*) argsList];
NSString* message = [[[NSString alloc] initWithFormat:format arguments:argsList] autorelease];
free(argsList);

关于如何使这个 ARC 兼容有什么建议吗?或者我们甚至愿意采用更好的方法。

最佳答案

这仅适用于具有单个元素的数组

在我使用 64 位架构进行编译之前,chrisco 的回答效果很好。这导致了一个错误:

EXC_BAD_ADDRESS 类型 EXC_I386_GPFLT

解决方案是使用稍微不同的方法将参数列表传递给方法:

+ (id)stringWithFormat:(NSString *)format array:(NSArray*) arguments;
{
__unsafe_unretained id * argList = (__unsafe_unretained id *) calloc(1UL, sizeof(id) * arguments.count);
for (NSInteger i = 0; i < arguments.count; i++) {
argList[i] = arguments[i];
}

NSString* result = [[NSString alloc] initWithFormat:format, *argList] ;// arguments:(void *) argList];
free (argList);
return result;
}

关于objective-c - 将 NSArray 内容转换为可变参数(使用 ARC)以与 NSString initWithFormat 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8273380/

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