1

我想创建一个特殊的类来保存很多值,比如 strName、strNo、intPassword……这样其他几个类就可以修改这个类中的相同值。我想使用点语法来调用它的属性,比如

Values.strName = ...; 
我不想在每次读/写它的值之前初始化类,因为它的一些值仍在使用中。

我将类称为“值”并使用以下代码对其进行设计:

@interface Values : NSObject {
    IBOutlet NSString *strName;
}
@property (nonatomic, copy) NSString *strName;
@end

我将“Values.h”导入另一个类并使用


Values.strName = @"Name";

我不创建“值”对象以避免数据被覆盖。弹出一个错误,说“之前的语法错误”。令牌'。还有其他方法可以创建一个存储全局变量但在使用这些数据时不需要初始化的类吗?

4

3 回答 3

4

另一个解决这个问题的方法是将变量(或类)添加到 AppDelegate 对象。AppDelegate 很容易变成一团乱麻,但如果这些变量确实是您的应用程序的属性,那么它就是适合它们的地方。

您始终可以使用[UIApplication sharedApplication].delegate(您可能需要强制转换)获取对 AppDelegate 的引用

于 2009-03-11T07:42:15.030 回答
3

我想创建一个特殊的类来保存很多值,比如 strName、strNo、intPassword ......

为什么?将不可变和原始对象放在只读全局变量中没有任何问题:

NSString *const strName = @"Name";
const NSInteger intPassword = 0xDEADBEEF;

如果您想将它们作为全局变量添加前缀,“g”(如gStrName等)很常见并且可以正常工作。

你可能会说“但全局变量是邪恶的!”,但想想你在说什么:为什么全局变量是邪恶的?

  • 因为其他代码可以更改对象。(不可变对象不是这样。)
  • 因为其他代码可以替换对象。(对于只读 ( const) 变量则不然。)
  • 因为两段代码可以使用同一个对象。(如果对象是基本的,例如字符串或整数,则不是问题。)

只要这些抱怨都不适用,全局变量就没有错。它们在 Cocoa 中很常见(例如,它的大多数字符串常量实际上是全局变量)。

于 2009-03-11T05:19:21.207 回答
2

如果您使用单例模式,那么您可以实现接近此的目标。使用 Matt Gallagher 的“ SynthesizeSingleton.h ”助手:

// Values.h
#import "SynthesizeSingleton.h"

@interface Values : NSObject {
  ...
}

// props

+ (Values *)sharedValues;
@end

// Values.m
@implementation Values

SYNTHESIZE_SINGLETON(Values);

@synthesize props;

@end

然后使用你的单例:

NSString *myVal = [[Values sharedValues] someValue];

或者:

Values *v = [Values sharedValues];

NSString *myVal = v.someValue;

于 2009-03-11T04:07:50.443 回答