我正在浏览一个可变参数列表,当我到达列表中的最后一个对象时,我总是会收到 BAD_ACCESS
错误。我强烈认为它是 ARC相关问题。
这是我的做法:
-(NSString *)replaceTokensWithStrings:(NSString *)firstKey, ... {
va_list _arguments;
va_start(_arguments, firstKey);
for (NSString *_currentArgument = firstKey; _currentArgument != nil; _currentArgument = va_arg(_arguments, NSString*)) {
NSLog(@"%@", _currentArgument);
}
va_end(_arguments);
return nil;
}
我必须以某种方式告诉编译器保留 va_arg
返回的结果,但我似乎无法弄清楚在哪里以及如何应用此范例。
更新 1: 这是我调用方法的方式:
[@"Hello <firstname> <lastname>" replaceTokensWithStrings:
@"firstname", @"Peter",
@"lastname", "Smith",
nil];
更新 2: 我更新了我的问题并添加了一个错误以揭示我实际上做错了什么。请参阅下面我的回答。
最佳答案
我完全走错了路。问题根本不在于函数,而在于我如何调用该函数(其他参与者不可能知道这一点,因为我没有在我的问题示例中犯错误)。
我更新了我的问题,实际问题是我没有传递 NSString 列表,而是传递了 5 个 NSString,而最后一个是普通的 C 字符串。
最后一个 C 字符串导致了 BAD_ACCESS
:
差:
"Smith"
好:
@"Smith"
现在我很尴尬:-)
关于iphone - ARC 和可变参数导致 BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11560291/