Objective-C - 创建指向AppDelegate的指针

时间:2012-08-05 19:42:53

标签: objective-c pointers delegates

我有一个使用app委托的类,特别是它有一个NSUserDefaults属性,正在从我的班级更新。

在我的auth类实现文件中,我有:

+ (BOOL) checkUserDefaults {
    AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];

    if([appDelegate.session objectForKey:@"UserID"] != nil) {
        return TRUE;
    } else {
        return FALSE;
    }
}

+ (void) syncUserDefaults : (NSString *) UserID {
    AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
    [appDelegate.session setObject:UserID forKey:@"UserID"];
    [appDelegate.session synchronize];
}

我如何存储这行代码:

AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];

作为一个全局(对于这个类),所以我可以写例如 [app.session setObject ...]

我可以做一个功能:

+ (AppDelegate *) app
{
    return (AppDelegate *) [[UIApplication sharedApplication] delegate];
}

然后做[[self app].session setObject...],但是如果我多次引用“app”函数会多次实例化AppDelegate不会吗?

3 个答案:

答案 0 :(得分:3)

这正是Singleton设计模式的用途,以及为什么Cocoa框架的开发人员可以在应用程序中访问对象的情况下使用它,但应该只实例化一次。

+[UIApplication sharedApplication]是一个返回UIApplication类的现有实例的方法。在选择器中使用“共享”一词是一个很好的提示,the docs for UIApplication清楚地表明它是一个单身人士:

  

<强> sharedApplication

     

返回单例应用程序实例。

     

+ (UIApplication *)sharedApplication

这意味着您可以放心,当您将 n 对象称为 n 时,您不会实例化 n 对象。

答案 1 :(得分:1)

您正在获取对应用程序委托的引用并将其强制转换为您的特定类,您没有使用此代码实例化应用程序委托,因此没有内存问题

答案 2 :(得分:0)

不,您的app方法不会创建任何对象,它只会找到一个全局对象并返回指向其属性的指针。