美文网首页iOS高效开发者iOS开发iOS学习
用代码解释为什么要用 '单例'

用代码解释为什么要用 '单例'

作者: 小熊翻译App | 来源:发表于2017-06-19 18:19 被阅读78次

    在整个工程中(全局)需要使用其它类中的方法时,并且我们需要其它类中的数据(此时不能新创建这个类的对象,否则不能拿到数据),这个时候需要使用单例.

    单例的使用

    例如:在 BTLocationManager.h 中:

    + (instancetype)sharedManager;
    

    .m中:

    static BTLocationManager *_instance;
    + (instancetype)sharedManager {
        NSLog(@"_instance=  %@", _instance);
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            if (_instance == nil) {
                _instance = [[self alloc]init];
            }
        });
        return _instance;
    }
    
    // startLocate 方法
    - (void)startLocate {
            // 定位的方法
    }
    

    全局使用 BTLocationManager 类时,需要使用单例:

    用单例调用 BTLocationManager 的方法
    [[BTLocationManager sharedManager] startLocate];
    

    用代码解释 '单例' 的作用

    单例做的事情可以用另一种方式去解释:如下
    在你调用 startLocate 这个方法的时候写一个方法,然后在 BTLocationManager 中调用这个方法将 BTLocationManager 这个类创建的对象传过来,例如:
    我在 LBSManager这个类中需要使用到 BTLocationManager 这个类的对象,我需要将这个对象传递给 LBSManager ,首先在 BTLocationManager 创建一个对象,同时用全局变量记录这个对象(否则出了这个方法就释放了,在其它的类中就拿不到这个对象了):

    BTLocationManager *locationManager = [[BTLocationManager alloc]init];
    _locationManager = locationManager;
    

    在 LBSManager.h 类中写一个方法:

     - (void)handleGlobalLocationManager:(BTLocationManager *)locationManager;
    

    LBSManager.m中实现:

    - (void)handleGlobalLocationManager:(BTLocationManager *)locationManager {
        _locationManager = locationManager;
    }
    

    然后BTLocationManager中调用,将:

    LBSManager *lbsManager = [[LBSManager alloc]init];
    [lbsManager handleGlobalLocationManager:_locationManager];
    

    这样就可以在 其LBSManager 类中调用 BTLocationManager 的方法了:如下

    [_locationManager startLocate];
    效果和单例一样,这只是对单例的解释
    

    这时就可以在 LBSManager 中使用 BTLocationManager 的对象了,并且在这两个类中只创建了一次 locationManager 对象,相当于单例的功能.
    这样完成一次全局的使用是相当麻烦的,所以单例的使用会很方便的让我们在全局使用某个类,这个类的对象只需要创建一次,最好就是创建单例,否则可能会出错(很可能会重复创建某个累的对象导致拿到的对象不是同一个,造成值传递为空的)或者比较繁琐.

    相关文章

      网友评论

        本文标题:用代码解释为什么要用 '单例'

        本文链接:https://www.haomeiwen.com/subject/nzfnqxtx.html