【问题标题】:Creating global Variables and Objects in Objective C在 Objective C 中创建全局变量和对象
【发布时间】:2015-04-02 17:30:15
【问题描述】:

我是 Objective-C 的新手,并且正在开发一个包含多个 viewController 文件的应用程序。我需要访问在一个文件中设置的变量的值才能在其他文件中访问。我该如何实现。

我在做什么,我创建了一个 Globals.m 类并在其中声明了变量。

#import <Foundation/Foundation.h>

@interface Globals : NSObject

@property  NSString*  firstName;
@property NSString* lastName;
@property NSString* emailId;

@end

我的问题是: 1.上述声明是否会使这些变量在不同文件中保留值?

  1. 我应该在哪里创建一个应该可以访问的类的对象 在所有文件中。

【问题讨论】:

  • 你可以去掉@property注解...(它只是用于生成getter/setter方法。)然后,使用#import将这个文件导入到任何你想使用变量的地方。
  • 删除@property 后报错cannot declare variable inside interface
  • 我建议您改用单例模式
  • 嗯,你知道吗?只需摆脱@interface(和@end)。此文件中不需要注释,因为您只是声明了一些常量。
  • 如果你想要一个对象(我的回答没有创建一个类......只是一个平面文件),那么大力水手的回答会更好。

标签: objective-c iphone


【解决方案1】:

我可能会建议使用单例模式,因为它允许您通过应用程序保存类的实例。所以你可以在一个类中设置firstName,然后在另一个类中获取它。

MySingleton.h

@interface MySingleton : NSObject

// Our properties we want to set.
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;
@property (nonatomic, strong) NSString *emailName;
// etc...

// Our class method for getting the shared instance.
+ (MySingleton *)sharedInstance;

@end

MySingleton.m

#import "MySingleton.h"

@implementation MySingleton

+ (MySingleton *)sharedInstance
{
    static dispatch_once_t pred = 0;
    static id sharedObject = nil;
    dispatch_once(&pred, ^{
        sharedObject = [[self alloc] init];
    });

    return sharedObject;
}

@end

然后在您的其他课程中,您只需导入 MySingleton 课程并执行以下操作:

MySingleton *singleton = [MySingleton sharedInstance];
[singleton setFirstName:@"Bob"];

有关单例模式和其他设计模式的更多信息,这里有一个教程,您可以通过iOS Design Patterns 阅读。 Correct Singleton Pattern Objective C (iOS)?

【讨论】:

  • 在此之后如何访问其他文件中的sharedObject
  • 查看我刚刚完成的编辑。您需要做的就是调用类似MySingleton *singleton = [MySingleton sharedInstance]; 的类方法,然后您就可以访问它拥有的所有属性。
  • 变量在不同文件中访问时会保留那里的值??
  • @Popeye 你还需要#import,不是吗? (假设您的课程在不同的文件中......)
  • @martinjakubik 是的,抱歉,我会更新,但我通常认为导入是给定的。
猜你喜欢
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多