在单例中使用self作为参数

时间:2013-12-23 12:23:49

标签: objective-c singleton self

我在单例中有以下方法标题:

-(int) reconnectToServerForClass:(id)myClass

参数myClass始终是调用类的自身对象。我的项目中的不同ViewControllers调用此方法,所以我的问题是:

是否可以访问myClass.view或我该怎么做才能实现?


我的意图是我想为每个调用该方法的ViewController显示进度:

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:myClass.view animated:YES];

在我可以访问view-property之前是否需要转换myClass?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以执行以下操作:

-(int) reconnectToServerForClass:(UIViewController *)myClass
{
    //myClass.view
}

或在方法

-(int) reconnectToServerForClass:(id)myClass
{
    if([myClass isKindOfClass:[UIViewController class]])
    {
        UIViewController *viewController = myClass; //edit as suggested by Peter Segerblom
        //viewController.view
    }
}

您选择的哪个选项取决于您如何使用它以及如何管理或限制调用者,在选项1中,参数必须是UIViewController的子类,并且选项相同2但不同之处在于您可以传入任何内容,但如果类型不是UIViewController,则它将无效。

免责声明:此代码未经过内存测试和输入,因此可能无法编译,如果您遇到问题我会告诉我,我会编辑答案。

答案 1 :(得分:0)

如果要从单例类访问它,则创建一个成员或属性是指向视图的指针,然后在reconnectToServerForClass中设置它:并像访问任何其他成员一样访问它。

如果你想从外面访问它,你也会这样做,并做一些像[[MySingleton instance] view]

这样的事情

请注意,龙位于您的路径之前,您需要确保视图在销毁之前“取消设置”此属性,否则您的单身人士可能会尝试访问不再存在的视图实例。