我需要在 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 多少次?的主要内容,如果未能解决你的问题,请参考以下文章