MainMenuViewController作为共享实例?

时间:2013-03-06 11:33:09

标签: ios objective-c uiviewcontroller singleton instance

Hello stackoverflowers

我有个问题。

我有一个MainMenuViewController类。它有一个方法,在应用程序的右侧显示一个菜单。从app的不同部分调用此方法,实际上,在每个导航控制器中,我必须将该方法设置为导航栏右键的目标。

这导致我在每个推送的视图控制器中都有这样的代码:

UIViewController *root = [self.navigationController.viewControllers objectAtIndex:0];
[self.topBarMenuButton addTarget:((RecordsViewController*)root).mainMenuController action:@selector(launchMenu:) forControlEvents: UIControlEventTouchUpInside];

而且我必须为每个根控制器提供对主菜单的引用。

我根本不喜欢。我想拥有的是:

[self.topBarMenuButton addTarget:[MainMenuController sharedInstance] action:@selector(launchMenu:) forControlEvents: UIControlEventTouchUpInside];

因此,应用程序的每个视图控制器都可以访问主菜单,而无需从其根视图控制器或应用程序委托中获取它。

这是个好主意吗?这对我来说听起来不错,但我不确定使用共享视图控制器实例是否有任何不利之处。

感谢和快乐的编码

1 个答案:

答案 0 :(得分:0)

最好根据您的要求使用单身。

在MainMenuViewController.m文件中

static MainMenuViewController *_sharedMySingleton;

+(MainMenuViewController *) sharedInstance
{
    @synchronized([MainMenuViewController class])
    {
        if (!_sharedMySingleton)
        {
            _sharedMySingleton = [[self alloc] init];

        }
        return _sharedMySingleton;
    }
    return nil;
}

您想要访问此对象的地方只需像这样调用...

[self.topBarMenuButton addTarget:[MainMenuController sharedInstance] action:@selector(launchMenu:) forControlEvents: UIControlEventTouchUpInside];