gpt4 book ai didi

objective-c - 为什么 NSArray arrayWithObjects 需要终止 nil?

转载 作者:太空狗 更新时间:2023-10-30 03:16:34 24 4
gpt4 key购买 nike

我知道它标志着一组可变参数的结束,但为什么它不能以不需要 nil 的方式实现呢?

最佳答案

这一切都与 C 调用 ABI 有关。

考虑这些方法:

- (id)initWithFormat:(NSString *)format, ...;
+ (id)arrayWithObjects:(id)firstObj, ...;
+ (id)dictionaryWithObjectsAndKeys:(id)firstObject, ...;

... 告诉编译器可以存在任何类型的可变数量的参数。编译器无法知道这些类型需要是什么(真正的定义有有助于此的标记)。

现在,考虑这三种方法。对于可变参数列表中可能存在的内容,这三者都有截然不同的要求。数组必须 是一堆对象后跟一个 nil。字典需要一堆对象对,后跟一个 nil。最后,字符串方法需要一堆与格式字符串中的类型相匹配的参数。

所有这些行为都与被调用的方法直接相关,如果 API 的作者决定“难以使用”,解码变量参数的行为可以在运行时修改,只是为了让生活困难。

底线:C ABI 没有语法允许指定方法或函数采用可变数量的参数以及对参数或其终止的任何类型的约束集。

Objective-C 可以改变方法声明和调用的规则,但这对 C 函数或 C++ 没有帮助,这两者都必须与 Objective-C 保持兼容。

关于objective-c - 为什么 NSArray arrayWithObjects 需要终止 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1309535/

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