[英]What is the difference between UIApplication.sharedApplication.delegate.window and UIApplication.sharedApplication.keyWindow?
[英]What's the difference between [UIApplication sharedApplication] and application argument of didFinishLaunchingWithOptions?
我現在正在學習有關iOS 7和Xcode 5中的后台獲取功能的信息,並且閱讀了一些教程,這些教程解釋了如何在application: didFinishLaunchingWithOptions:
方法中設置setMinimumBackgroundFetchInterval
。
我讀過的一種示例代碼如下:
-(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
參數的類型完全相同。
如果兩者之間沒有任何區別,那么使用前者的意義何在? 據我所知,采用第一種方法的樣本更多,但我總是覺得越簡單越好(同樣,如果沒有區別,如上所述,我認為存在一些區別)。
沒有區別,當您不知道哪個類發送該消息時,使用method參數非常有用(例如,假設您有多個UITableView
,它們都具有相同的委托,您想知道哪個叫委托)。
在這種情況下,每個應用程序只有一個UIAplication
,即您的[UIApplication sharedApplication]
的一個[UIApplication sharedApplication]
和一個調用委托的[UIApplication sharedApplication]
。
總結,就是同一對象,沒有區別,只有風格。
擴展示例,假設您有一個像這樣的變量:
@property (nonatomic, strong) UITableView *myTable;
do
self.myTable.delegate = self;
調用委托時,存在等效項:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//self.myTable = tableView;
}
在這種情況下,沒有區別。
關於使用哪個選項,可能與樣式/偏好有關。
我使用[UIApplication sharedApplication]。
沒有區別,UIApplication是單例類,[UIApplication sharedApplication]是訪問單例類的共享變量的一種方法。如果從UIApplication類本身調用方法,則使用應用程序即可訪問該方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.