Ios 在.h文件中声明变量

Ios 在.h文件中声明变量,ios,Ios,只是想知道在.h文件中声明许多变量是否是一种好的编程实践 我正在编写我的第一个应用程序,通过它我学习xcode和obj-c。此ios应用程序只有一个xib、一个.m和一个.h文件。我发现我自己很多时候在.m文件中有一个特定的变量,我需要在不同的方法/位置使用它,最后我在.h文件中声明了它,这看起来像是我把这个变量设置为全局变量,我认为有很多这样的变量不是一个好主意 在.h文件中声明大量变量是否安全/正常,或者我是否应该以其他方式处理它 谢谢 在.h文件或 我应该用其他方式来处理吗 在.h中包含很

只是想知道在.h文件中声明许多变量是否是一种好的编程实践

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

在.h文件中声明大量变量是否安全/正常,或者我是否应该以其他方式处理它

谢谢

在.h文件或 我应该用其他方式来处理吗

在.h中包含很多变量是完全可以的!它只会稍微增加编译时间,并将二进制文件的大小增加任意数量。如果您担心,只需将实现分为几个类别

我发现我自己很多时候都有一个特定的变量,我需要在.m文件中的不同方法/位置使用它,我只是 最后在.h文件中声明它,这似乎是我在做的 变量全局,我不认为这是一个好主意,有很多 那些


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

您的.h文件是类的公共接口。它应该只包含其他类需要知道的属性和方法

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

您还可以在
@实现之后直接在大括号中声明IVAR


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

您可以在需要时在.h文件的接口中声明许多变量(其他答案也提到了这一点)。但是,考虑将不需要公开的实例变量移到.m文件中的一个类中是明智的。例如:

在.h中:

#import <Foundation/Foundation.h>

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

@property (nonatomic, strong) NSDictionary *publicDict;

-(void)publicMethod:(id)anObj;

@end

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

您可以通过使用
标记
来引用
UIView
(及其子类)变量来减少变量的数量
#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