在.h文件中声明变量

时间:2012-03-28 04:53:14

标签: ios

只是想知道它的良好编程实践是否在.h文件中声明了很多变量。

我正在编写我的第一个应用程序,我通过它学习xcode和obj-c。这个ios应用只有一个xib,一个.m和一个.h文件。我发现自己很多次,我有一个特定的变量,我需要在.m文件中的不同方法/位置使用,我最后在.h文件中声明它,这似乎是使变量全局变量我不认为拥有很多这些是个好主意。

这是安全/可以在.h文件中声明很多变量,还是应该以其他方式处理它?<​​/ p>

由于

3 个答案:

答案 0 :(得分:2)

  

这是安全/可以在.h文件中声明很多变量   我应该以其他方式接近它吗?

在.h中包含很多变量是绝对可以的!它只是增加了一点编译时间,并将二进制文件的大小增加了任意数量。如果它让您担心,只需将您的实施分成几个类别。

  

我发现自己很多次,我有一个特定的变量,我需要在.m文件中的不同方法/位置使用我只是   最终在.h文件中声明它,好像我正在制作   变量全局,我不认为有很多的好主意   那些。

在一个方法之外访问的变量应始终声明为iVars,如果需要强引用,则需要作为属性,或者需要由外部类访问。全局变量有所不同,您无需担心它。

答案 1 :(得分:1)

您的.h文件是您班级的公共界面。它应该只包含其他类需要了解的属性和方法。

您可以在.m文件的类继续中声明ivars和内部方法及属性(这是非常常见的,现在UIViewController子类的模板中自动包含了一个)。

您也可以在@implementation之后直接在大括号内声明ivars。

在iOS5中,使用ARC,声明的ivars默认是强引用,因此您不必使用属性或访问器方法,但该选择取决于您的类的其余部分。例如,您可以在获取或设置变量时使用延迟实例化或执行其他任务或KVO,在这种情况下,您总是希望通过属性或方法访问它,如果您正在为某些操作执行此操作 ivars,而不是其他人,它开始看起来有点凌乱。

答案 2 :(得分:0)

您可以在需要时在.h文件的界面中声明许多变量(正如其他答案所述)。但是,考虑将不需要公开的实例变量移动到.m文件中的类别中是明智的。例如:

在.h:

#import <Foundation/Foundation.h>

@interface SomeClass : NSObject {
  NSDictionary *publicDict;
  NSArray *privateArray;
}

@property (nonatomic, strong) NSDictionary *publicDict;

-(void)publicMethod:(id)anObj;

@end

在.m文件中:

#import "SomeClass.h"

@interface SomeClass () //Category that denotes private methods

@property (nonatomic, strong) NSArray *privateArray;

-(void)privateMethod;

@end

@implementation

@synthesize publicDict;
@synthesize privateArray;

-(id)init {
  //...
}

-(void)publicMethod:(id)anObj {
  //..
}

-(void)privateMethod {
  //..
}

@end

这会导致编译器在外部类访问该类别中包含的任何私有方法时发出警告。另外,这是在Objective-C中遵循封装方面的广泛接受的方式。