[英]About .h and .m files (how to manage) [closed]
嗨,经验丰富的程序员!
我想问你一些有关干净代码的问题:)
我想保持代码干净整洁,这就是我的问题:
1)我应该在哪里放置#imports? 我的原则:(我不认为它们很好)
代表应在.m中
@interface ViewController() <UIAlertViewDelegate> @end
2)我应该在哪里放置实例变量?
3)我应该在哪里放置我的方法?
(顺便说一句,很明显)
4)#defines呢?
5)我应该在哪里放置NSNotification全局标识符以及如何组织它们
但是...
一年前,我遇到了另一种情况- 一切都在.h中,但我认为这也很糟糕
该怎么办? 您使用什么原则? 谢谢!
那是关于编码风格的问题,而不是关于“如何使其可编译”的问题
这是我的方法:
#import <Foundation/Foundation.h>
或#import <UIKit/UIKit.h>
放入.pch文件。 没有头文件或实现文件再次进行这些导入(使iOS和Mac OS X之间的共享代码更容易一点)。 @class Foo;
声明( @class Foo;
),以避免拉入其他.h文件。 @interface Foo ()
)中定义。 在极少数的情况下,一个类具有一些应由几个类访问但不包含“普通”用户的内容,我创建了foo_protected.h
头文件,其头文件类定义了“ protected”方法。
关于#define
的字词:尽可能避免使用它们。 如果可能,请改用const
变量或enum
,因为附加的类型信息可以帮助编译器以这种方式捕获更多错误。 例如,使用enum
s有一个很好的好处,如果您有switch
但未处理enum
所有值,则会收到警告。 如果添加新值,则会在所有忘记处理警告的地方得到警告,而#define
则不会。
我个人认为答案很简单。 现在可以在@implementation
声明实例变量,并且可以在.m文件的类扩展中声明属性和协议采用,因此我不必在.h文件中放任何我绝对不必放的东西那里。
导入框架应始终位于.h中
没有为什么?
导入.h文件应始终位于.m中
那是很模糊的。 而且,如果您需要在头文件中导入内容,该怎么办? 您想对一个类进行子类化,您该怎么做? #import "SomeClass.h"
标头中的#import "SomeClass.h"
。
.h文件应仅具有@class,而不能具有导入(不包括UIKit等框架)
无脑 (对不起,确实如此。请参见上面的推理。)
2)我应该在哪里放置实例变量?
由于其他类实际上不应该访问ivars(即,建议不要将ivars public
),因此您可以将它们放在任何位置:标头很好(并且与v1.0脆弱的运行时API兼容非常有用),但是您也可以将所有内容都放在类扩展中。
3)我应该在哪里放置我的方法?
您几乎完全正确。
4)#defines呢?
就我而言,这也很好。 基本上,将定义和枚举放在需要可见的地方。
苹果在.h文件中有很多私人物品。在大多数情况下,我的.h文件只是..空:)
好吧,甚至苹果也不太符合他们的风格。 始终如一。
空标题? 如果不需要标题,请不要使用标题。 使用标头为您的类,函数和类型声明提供接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.