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

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

单例的使用

例如:在 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 对象,相当于单例的功能.
这样完成一次全局的使用是相当麻烦的,所以单例的使用会很方便的让我们在全局使用某个类,这个类的对象只需要创建一次,最好就是创建单例,否则可能会出错(很可能会重复创建某个累的对象导致拿到的对象不是同一个,造成值传递为空的)或者比较繁琐.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 4,551评论 4 34
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,733评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,909评论 18 399
  • AFHTTPRequestOperationManager 网络传输协议UDP、TCP、Http、Socket、X...
    Carden阅读 5,351评论 0 12
  • 编码规范习惯: html标签命名依据功能或者标签在页面中的含义来明明;尽量不要用样式来明明元素; CSS中用两个空...
    mianmiani阅读 383评论 0 0

友情链接更多精彩内容