gpt4 book ai didi

objective-c - objective-c - 导入 .m 和 .h 文件 - 它有什么作用

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:08 25 4
gpt4 key购买 nike

在 objective-c 中,当您说#import "MyClass.h"时实际发生了什么? (编译器是否为您复制了一些东西?)

  1. 在 MyClass.m 文件中,如果我 #import "UsefulClass.h",这意味着 UsefulClass 在此文件下可用,我可以创建对象并将消息发送到它的一个实例。

  2. 在 myClass.m 文件中,我必须#import "MyClass.h",这听起来像是将我的实现文件链接到它的头文件(称为基础文件?),感觉很不错与第一个不同。那么 #import 会根据情况做两种不同的事情吗?还是从另一个角度来看实际上属于一类。

  3. 定义在 .m 文件中但未在 .h 文件中的方法被认为是私有(private)的。从另一个类,我可以以某种方式调用私有(private)方法吗? (比如如果我 #import .m 而不是 .h?这样类就会知道实现文件定义了什么。)

  4. objective-c #import 和 c #include 有什么区别?

  5. 此外,@interface MyClass : NSObject 用于 .h 文件,@interface MyClass() 用于 .m 文件。那么当你想拥有私有(private)属性时,它只是一种语法格式(如括号)吗?或者这背后有什么逻辑吗?

最佳答案

Is the compiler copying something for you? [when you say #import "myClass.h"]?

不,它没有。 #import 预处理器指令几乎与 #include 指令相同,只是它不需要 inclusion guard。 - 从 C 中借用的结构,看起来不直观。

  1. 可视化将 .h header #import 到 .m 文件时发生的情况的最简单方法是想象该 header 的内容全部放在替换 #导入。本质上,这就是预处理器的作用。
  2. 发生与#1 中相同的事情 - header 是否与 .m 文件相关对预处理器来说无关紧要。
  3. 定义私有(private)方法和私有(private)实例变量的一种更常见的方法是在类扩展中声明它们(参见第 5 项)。这会保留所有声明的方法,这是一件好事。有多种方法可以调用 Objective-C 中的私有(private)方法——您可以通过反射来实现,或者您可以通过在不同的类上定义签名来伪造它,然后在您选择的类上调用它。编译器会发出警告,但它会服从。
  4. 我在上面提到过,不需要使用 #import 的包含保护。
  5. 带空括号的接口(interface)是一个类扩展。它类似于一个类别,但它允许您将实例变量添加到您的类中。

关于objective-c - objective-c - 导入 .m 和 .h 文件 - 它有什么作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038532/

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