Singleton的替代方法是什么?

时间:2015-01-15 17:28:11

标签: ios objective-c singleton

我有一吨工作正常,但我不想使用单身而不是任何其他最佳方式 找到我的代码以供参考

Myclass.h

+ (instancetype)shareInformation;

Myclass.m

+ (instancetype)shareInformation
{
    static Myclass *manager;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{

        manager = [[Myclass alloc] init];       
    }); 
    return manager;
}

MyNextClass.m

[[Myclass shareInformation] methodofMyclass:^(NSDictionary *results, NSError *error) {

    //my code
}];

我有一个班级Myclass,其中我使用单身人士来manager = [[Myclass alloc] init];我在其他班级MyNextClass中称呼这个,但我不想这样做,我的意思是我不想使用单身模式我需要一些替代方案,我在这里做什么

3 个答案:

答案 0 :(得分:0)

你可以使用单身,也可以使用普通的实例,它取决于你。单身人士的一个主要好处是,您可以毫无困难地在任何地方获得参考。

您始终可以创建一个类,并在任何您想要使用它的位置传递它的引用。例如,在视图控制器中创建它,确保在以下视图控制器中创建它的属性,然后将该相同的引用传递给新的视图控制器。

最好使用单身人士,如果这是你想要完成的事情而你只需要一个实例。

答案 1 :(得分:0)

我猜你想避免使用单身,因为它被认为是反模式。
解决方案是使用依赖注入容器连接应用程序并将其配置为将对象解析为单个实例 我不熟悉ios开发,但台风看起来很受欢迎。

答案 2 :(得分:0)

另一种选择,对于"全球"数据,就是利用AppDelegate。您可以在AppDelegate本身中放置简单属性,或者定义一个属性(或显式" getter"方法),该属性返回指向更复杂的全局"对象

请注意,以这种方式使用AppDelegate被视为"错误的形式"很多人,但除了访问AppDelegate本身有点尴尬之外,它真的没那么糟糕。 (并且它打破了那些确定他们知道什么"关注点分离" 真正意味着什么的人的敏感性。)