Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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_Runtime Error_Header Files - Fatal编程技术网

Objective c 简单地导入头是否会导致运行时问题?

Objective c 简单地导入头是否会导致运行时问题?,objective-c,runtime-error,header-files,Objective C,Runtime Error,Header Files,我意识到这样做会导致编译错误。但是,如果没有(新的)编译错误或警告出现,导入是否总是安全的?如果我使用import语句(例如,删除重复协议定义警告),那么这样做本身是否会改变运行时行为?导入新标头后,需要哪些检查(如果有)来确保操作的不变性?是的,导入标头可能会导致运行时问题 例如,您可能会收到一条警告,说明选择器未知,因此编译器正在对其签名进行假设。如果您通过导入相关的头来修复该警告,则会更改编译器发出的代码。通常,它会将代码从断开更改为正确,但这仍然会导致运行时更改 如果使用#import,

我意识到这样做会导致编译错误。但是,如果没有(新的)编译错误或警告出现,导入是否总是安全的?如果我使用import语句(例如,删除重复协议定义警告),那么这样做本身是否会改变运行时行为?导入新标头后,需要哪些检查(如果有)来确保操作的不变性?

是的,导入标头可能会导致运行时问题

例如,您可能会收到一条警告,说明选择器未知,因此编译器正在对其签名进行假设。如果您通过导入相关的头来修复该警告,则会更改编译器发出的代码。通常,它会将代码从断开更改为正确,但这仍然会导致运行时更改

如果使用
#import
,则标头可以定义预处理器宏,从而从根本上改变后续代码。例如,它可以
#定义setneeds显示setHidden
或其他内容


我能想到的唯一验证导入头不会改变生成的代码的方法是检查生成的代码并比较前后。您可以要求Xcode或
clang
从编译中生成程序集。您也可以使用
otool-tV
来反汇编二进制文件(尽管这不会显示静态数据(例如字符串)的变化)。

您能更具体一点吗,因为您的问题让我觉得您不明白头文件是什么。您是在说
\import
还是
@import
,谈论进口。。。。在我的特殊情况下,我得到了一个重复协议定义警告,注意到删除重复协议会导致“选择器的实例方法未知”错误。但是,我可以通过#将头(包含协议声明)导入出现错误的实现文件来解决这个问题。然后我想知道。。。可能有哪些副作用,如何确保没有副作用