我在看斯坦福大学的iPad和iPhone应用程序开发课程视频。教师在视频中说,我们可以控制 - 将UI对象拖放到实现文件以创建一个动作。但是这样该方法不会在头文件中声明。这是否意味着可以在.m文件中实现方法而不是在.h文件中声明?我们不能在头文件中声明方法吗?
6
A
回答
6
取决于你如何定义 “OK” :-)
的Objective-C使用动态方法查找,并没有真正强制访问(“私人”,“公共”等)说明符。所以你不需要需要来在头文件中声明任何方法。
但是你最终会对编译器发起冲击,因为它确实执行了大量的类型检查,除非你说服它,否则你会失败。
5
您不需要在头文件中声明实现中的所有方法。但是,如果不在头文件中,显然你不能在另一个文件中通过字面名称引用它们,也不能在实现文件中“转发引用”它们。
(请注意,这是不是从普通的C不同,但是是在C类的方法++不同。)
5
它的“OK”不声明在标题是方法,在某些情况下。例如,如果使用ARC,那么编译器通常需要知道方法签名,以便它可以做正确的事情。但基本上所有的意思是,无论你使用哪种方法,它都必须知道你所调用的方法。
由于你在谈论Interface Builder,它有点不同,它会知道所有的方法,因为它可以“看到”你的头文件和实现文件的整个上下文,并知道方法的存在。即按照我上面的术语,该方法在使用之前已经被定义。
关于使用前限定,一般接受的方法是要么:
定义在接口文件(.h)中的方法。例如为:
MyClass.h
@interface MyClass : NSObject - (void)someMethod; @end
MyClass.m
@implementation MyClass - (void)someMethod { // do something } @end
定义在一个类延续类别的方法。例如:
MyClass.h
@interface MyClass : NSObject @end
MyClass.m
@interface MyClass() - (void)someMethod; @end @implementation MyClass - (void)someMethod { // do something } @end
相关问题
- 1. 在我的头文件中声明方法
- 2. 不能在主要方法中声明方法吗?
- 3. 我们可以在QML文件中声明全局变量吗?
- 4. 在其他程序使用的头文件中,我只能声明模板吗?
- 5. CUDA C - 不能编译在头文件中声明,并在.CU
- 6. 头文件中的声明
- 7. 在ARC下的头文件中声明IBOutlets的正确方法?
- 8. 在.h文件中声明方法
- 9. 我们可以调用MainActivity中的同一类中声明的方法,而不是在android studio中的onCreate或其他方法中声明的方法吗?
- 10. 在头文件中声明变量C++
- 11. 在头文件中声明变量
- 12. 问题而在头文件中声明
- 13. 我不能在我的cpp文件中声明一个地图
- 14. cobertura maven插件不能在接口中使用java8默认方法声明吗?
- 15. 为什么我们不能在togglestatus函数中声明this.render?
- 16. 我不能在.h文件中声明这个属性,我可以在.m文件中吗?
- 17. 声明头文件和cpp文件C++
- 18. 方法不能被声明为public
- 19. 为什么不需要在.h文件中声明此方法?
- 20. VS2010可以告诉我哪个头文件在声明中拉?
- 21. 如何在我的头文件中声明一个常量对
- 22. extern声明和头文件在C
- 23. 头文件中的变量声明
- 24. 头文件中的空类声明?
- 25. 无法返回在头文件中声明的结构向量
- 26. 我们可以在app.config文件中声明变量
- 27. createOperate方法不能被声明为静态;静态方法只能在静态或顶级类型中声明
- 28. 我不能在Groovy脚本中放置类声明吗?
- 29. 是否可以在appCode的头文件(.h)中自动声明一个方法?
- 30. 在头文件中声明枚举,在源文件中不可见?
编译器的行为似乎在Xcode 4.5中有所变化。我有一堆我没有在.h中声明的方法,而且没有编译错误。但是,当我将此代码放入Xcode 4.2中以便检查与iOS 4.3的兼容性时,编译器会引发错误。 – JScarry 2012-12-13 19:56:14
@JScarry - 我注意到类似的行为,尽管它似乎随某种编译器标志而变化。但Xcode 4。5在.m中推送'@ interface'的'()'版本,并且可以将所有内部声明粘贴在那里。 – 2012-12-13 19:59:05