需要在objective-c中定义一个“可修改的”全局变量

时间:2011-04-02 18:01:16

标签: iphone objective-c cocoa global-variables

我有以下问题。我有两个操作信息的类但它们完全断开连接,即我无法到达另一个类。

我需要两个类都使用某个值。例如,类A设置值foo = A,类B需要能够读取该值并将foo设置为nil。

我考虑过在主应用代理中创建变量,但无法弄清楚如何。

想法?!!

3 个答案:

答案 0 :(得分:3)

全局变量通常都是坏主意。根据您的描述,我认为您可以使用KVO通知B类'foo'中的更改。

但是,如果你需要一个全局变量,你可以这样做:

@interface YourAppDelegate : NSObject <UIApplicationDelegate> {
}
@property (nonatomic) NSString *foo;
@end

@implementation YourAppDelegate
@synthesize foo;
...
@end


@implementation ClassA
...
- (void)someMethod {
YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.foo = @"NewValueOfFoo";
}
...
@end


@implementation ClassB
...
- (void)otherMethod {
YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"Value of foo: %@", appDelegate.foo);  //This will print: "Value of foo: NewValueOfFoo"
}
...
@end

答案 1 :(得分:2)

我不确定“彻底断开连接”是什么意思。根据您要执行的操作,您可以使用NSUserDefaults

http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSUserDefaults_Class/Reference/Reference.html

或NSNotifications

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSNotification_Class/Reference/Reference.html

如果A类不需要了解B类,您也可以考虑委托。

答案 2 :(得分:0)

他为什么不能这样做?

一个。在项目中添加2个新文件:GlobalValues.hGloblaValues.m

B中。打开GlobalValues.h,并声明所有需要的变量。

extern NSString *MyServiceName; // name of the 'service':

℃。打开GlobalValues.m,然后导入GlobalValues.h启动新文件,并为您在头文件中声明的变量赋值:

#import "GlobalValues.h"

NSString *MyServiceName = @"MyService is called THIS";

d。在需要使用这些变量的类的实现文件中,您可以在最开始时添加:

#import "GlobalValues.h"