[UIApplication sharedApplication]与didFinishLaunchingWithOptions的应用程序参数有什么区别?

时间:2014-02-07 09:25:33

标签: ios objective-c

我现在正在学习iOS 7和Xcode 5中的后台提取功能,我已经阅读了一些教程,解释了如何在setMinimumBackgroundFetchInterval方法中设置application: didFinishLaunchingWithOptions:

我读过的一种示例代码如下:


-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval: UIApplicationBackgroundFetchMinimum];
    return YES;
}

另一个是以下内容,它利用application参数设置其后台初始化:


-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [application setMinimumBackgroundFetchInterval: UIApplicationBackgroundFetchMinimum];
    return YES;

但是,我在上面的两个代码中没有得到与另一个不同的东西。 shareApplication类方法返回UIApplication *,这与application参数的类型完全相同。

如果两者之间没有任何差异,那么使用前者有什么意义呢?据我所知,有更多的样本采用第一种方法,但我总觉得更简单更好(再次,如果没有差异 - 我认为存在一些差异,如上所述)。

3 个答案:

答案 0 :(得分:3)

没有区别,当您不知道哪个类发送了该消息时,使用method参数很有用(例如,假设您有多个UITableView,所有这些都具有相同的委托,你想知道哪一个叫委托。)

在这种情况下,每个应用只有一个UIAplication,而且是[UIApplication sharedApplication]中的那个和调用该代表的那个。

总结,是同一个对象,没有区别,只有风格。

扩展示例,假设您有一个这样的变量:

@property (nonatomic, strong) UITableView *myTable;
哟哟:

self.myTable.delegate = self;

当调用委托时,theres是等价的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//self.myTable = tableView;
}

答案 1 :(得分:0)

在这种情况下,没有区别。

关于你使用哪个选项,这可能是风格/偏好的问题。

我使用[UIApplication sharedApplication]。

答案 2 :(得分:0)

没有区别UIApplication是单例类,[UIApplication sharedApplication]是一种访问单例类共享变量的方法如果从UIApplication类本身调用该方法,则使用应用程序就足以访问该方法。