Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C中静态类型的性能优势_Objective C - Fatal编程技术网

Objective-C中静态类型的性能优势

Objective-C中静态类型的性能优势,objective-c,Objective C,在Objective-C中使用静态类型有什么性能优势吗?它是否仅用于安全检查?是的,它仅用于安全检查 Objective-C消息(方法调用)总是在运行时动态调度。添加额外的静态类型信息将有助于编译器警告您错误,但(在大多数情况下)对生成的代码没有影响。请参见objc中没有静态类型,一切都是动态的。如果你想要一个静态的语言,使用C++ +@ RICHARJ.R.Ssiii:这是真的吗?Objective-C中的类型规则是:根据Apple文档,静态、动态和弱。你能澄清一下吗?@Chandu对运行时来

在Objective-C中使用静态类型有什么性能优势吗?它是否仅用于安全检查?

是的,它仅用于安全检查


Objective-C消息(方法调用)总是在运行时动态调度。添加额外的静态类型信息将有助于编译器警告您错误,但(在大多数情况下)对生成的代码没有影响。请参见

objc中没有静态类型,一切都是动态的。如果你想要一个静态的语言,使用C++ +@ RICHARJ.R.Ssiii:这是真的吗?Objective-C中的类型规则是:根据Apple文档,静态、动态和弱。你能澄清一下吗?@Chandu对运行时来说,一切都只是一个对象,它没有“类型”的概念。您可以将指针强制转换为您想要的任何类型(除了一个块之外),它仍然会基于类调用正确的方法实现。现在,ARC对这一点的要求越来越严格,但在大多数情况下,语言中唯一的“静态”部分是在编译时作为警告执行的,并且可以通过在运行时永远不会失败的强制转换进行修复,与Java和C#等“真正的”静态语言不同,这不取决于编译器吗?静态类型对生成的代码没有影响这一点并不完全正确。多个相同的选择器可以返回不同的类型。在这种情况下,接收方的静态类型决定了要使用的objc_msgsend()的特殊风格,如objc_msgsend_stret()或objc_msgsend_fpret()。@Gabe Nope——根据定义,正确编写的Objective-C编译器将始终通过运行时的调度机制来调度每个方法调用。一个编译器可能有某种类型的扩展破坏了该要求,但它将不再是一个符合标准的ObjC编译器。@bbum:这很有趣。即使是像JavaScript这样完全动态的语言也允许这种优化,所以我认为像Objective-C这样的提前编译语言可以允许这种优化。方法的实现可以通过类别加载或滑动(或者,历史上,姿势)随时更改。因此,在保持Objective-C的绝对动态特性的同时,不可能进行这样的优化[不会在CPU或二进制大小方面产生巨大的潜在开销]。