目标c-导入.m和.h文件-它的作用

Weishi Z

在目标c中,当您说#import“ MyClass.h”时,实际上发生了什么?(编译器是否正在为您复制内容?)

  1. 在MyClass.m文件中,如果I #import "UsefulClass.h",则表示它UsefulClass在该文件下可用,并且我可以创建对象并将消息发送到该对象的实例。

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

  3. 在.m文件中定义但不在.h文件中定义的方法被认为是私有的。我可以从另一个类中以某种方式调用私有方法吗?(例如,如果我#import .m而不是.h ?,那么该类将了解实现文件定义的内容。)

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

  5. @interface MyClass : NSObject用于.h文件和@interface MyClass().m文件。因此,当您要拥有私有属性时,它只是语法格式(如括号)吗?或这背后有逻辑吗?

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

编译器是否正在为您复制内容?[当你说#import "myClass.h"]?

不,不是的。一个#import预处理指令是几乎相同的#include指令,不同之处在于它不需要一个包容后卫-在C借来一个结构,它看起来并不直观。

  1. 可视化#import将.h头文件转换为.m文件时发生的情况的最简单方法是,想象该头文件的内容完整地放置在代替.h的行上#import本质上,这就是预处理器所做的。
  2. 与#1中发生的事情相同-头是否与.m文件无关,对于预处理器而言都无关紧要。
  3. 定义私有方法和私有实例变量的一种更常见的方法是在类扩展中声明它们(请参阅项目5)。这样可以保留所有方法的声明,这是一件好事。有多种方法可以在Objective-C中调用私有方法-您可以通过反射来实现,也可以通过在其他类上定义签名然后在您选择的类上调用它来伪造它。编译器会发出警告,但它应服从。
  4. 我在上面提到过,不需要将包含防护与一起使用#import
  5. 带空括号的接口是一个类扩展。它就像一个类别,但是它使您可以将实例变量添加到类中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章