我需要在 iOS 的班级中声明 UIApplication SharedApplication 多少次?

Posted

技术标签:

【中文标题】我需要在 iOS 的班级中声明 UIApplication SharedApplication 多少次?【英文标题】:How many times i need to declare UIApplication SharedApplication in my class in iOS? 【发布时间】:2013-02-25 15:07:04 【问题描述】:

在我的 ios 应用程序中,我需要访问来自 AppDelegate 的一些数据。 所以我就这样用了

- (void)ViewDidLoad

    self.app = [[UIApplication sharedApplication] delegate];
    [self.app.arrayFromApp addObjects:self.myArray];
    [self.app loadSomething];

我想知道,当我在ViewDidLoad 中声明一次上述代码并且我可以从此类中的任何地方(方法、变量等)访问时,这是否足够?

或者

当我必须从AppDelegate 访问数据时,是否需要在每个方法中声明该代码?

例子。

- (void)methodOne

 self.app = [[UIApplication sharedApplication] delegate];
 self.app.isTrue = self.isTrueOrNot;


- (void)methodTwo

 self.app = [[UIApplication sharedApplication] delegate];
 [self.app loadSomething];

感谢您的帮助。

【问题讨论】:

【参考方案1】:

是的,如果您使用app 作为班级级别ivar,那么在您的班级中声明一次就足够了

 self.app = [[UIApplication sharedApplication] delegate];

如果您将app 声明为类中的属性,则无需在每个方法中声明它

【讨论】:

是的。我使用了 iVar。所以我只需要声明一次,我就可以在这个类的任何地方使用? thz :) 这假设您的应用程序属性很强大(或保留)。如果它很弱,您将失去参考。【参考方案2】:

另一种选择是在您的 appdelegate.h 文件中定义它

#define APPLICATION ((AppDelegate*)([UIApplication sharedApplication].delegate))

只是简写。

【讨论】:

【参考方案3】:

我建议将 app 设为只读属性并延迟实例化它。

@interface ViewController : UIViewController

@property (readonly, nonatomic) AppDelegate *app;

@end


@implementation ViewController

@synthesize app = _app;

- (AppDelegate *)app

    if (_app == nil) 
        _app = [[UIApplication sharedApplication] delegate];
    
    return _app;

@end

【讨论】:

以上是关于我需要在 iOS 的班级中声明 UIApplication SharedApplication 多少次?的主要内容,如果未能解决你的问题,请参考以下文章

班级声明中的全球资格

远程通知 iOS 8

在android中声明全局变量[重复]

在类声明中定义朋友功能

plsql游标插入不同的模式

PHP |访问未声明的静态属性