2015-02-06 27 views
0

这是一个非常基本的问题。 在AppDelegate.m其他类中陈述的引用变量

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.stationInfos = [StationDB database].stationInfos; 
    } 
    return YES; 
} 

,我希望能够用stationInfos从我ViewController.m内。最常用的方法是什么?

+1

为什么不能从视图控制器调用'[StationDB数据库] .stationInfos'? – 2015-02-06 17:35:33

+0

可能还有其他需要'stationInfos'的类。在那种情况下,在AppDelegate.m中是否有正确的决定? – 2015-02-06 18:31:35

回答

1

我将陈述它一般不赞成这样的数据存储在AppDelegate中(无论是.M或.h文件中)。

如果你需要从多个地方访问数据,那么一个Singleton对象通常是推荐的方法。单例是一种面向对象的概念,其中只维护对象的单个实例,以便允许从多个位置访问相同的数据源。或者,如果[StationDB数据库] .stationInfos已经是一个单身人士(我不熟悉这个对象),那么你可能可以在任何你需要的地方访问它。没有什么说你需要在.h或.m文件中定义它 - 你可以在需要它的方法中定义它。

的一般原则可能是:

  • 定义中的.h >>如果其他对象的有限#可能需要访问它。
  • 定义在.m >>如果只有那个类需要访问它。
  • 在特定方法中定义>>如果只有该方法需要访问它。
  • 定义为单例>>如果许多对象需要访问它。
  • 不要 >>在AppDelegate中定义它。最好将您的逻辑放在适当的模型,视图或控制器类文件中。
1

您将在.h而不是.m中设置变量。从那里,在你的ViewController.m中,你应该导入AppDelegate.h。

然后,当你想要的变量做:

AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; 
variableType *stationInfos = appDelegate.stationInfos; 
+0

在ViewController中,如果我在方法中使用委托的方法和属性,将appDelegate变量作为其属性'self.delegate = [UIApplication sharedApplication] .delegate'存储是一个好主意? – 2015-02-06 17:24:04

+0

你可以这样做,但不要称之为委托,这是部分保留或将导致问题。 – 2015-02-06 17:24:42

+0

更具体地说,如果我在两个方法A和B中使用appDelegate对象,我应该从'viewDidLoad'获取委托对象吗? – 2015-02-06 17:24:56