如何在单例模式下禁止init

有两种方法

第一种,在init里面抛出异常,定义私有的init

- (instancetype)init {
    [self doesNotRecognizeSelector:_cmd];
    return nil;
}

- (instancetype)initPrivate {
    self = [super init];
    if (self) {
    }
    return self;
}

+ (instancetype)sharedInstance {
    static MySingleton *sharedInstance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] initPrivate];
    });
    return sharedInstance;
}

第二种,在init里面直接返回单例

- (instancetype)init {
    return [[self class] sharedInstance];
}

- (instancetype)initPrivate {
    self = [super init];
    if (self) {
    }
    return self;
}

+ (instancetype)sharedInstance {
    static MySingleton2 *sharedInstance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] initPrivate];
    });
    return sharedInstance;
}
时间: 2024-10-08 04:48:46

如何在单例模式下禁止init的相关文章

iOS开发之单例模式下的初始化方法

iOS开发之单例模式下的初始化方法 一般的单例我们会这么写 +(instancetype)sharedXXXManager{ static XXXManager *sharedXXXManagerInstance = nil; static dispatch_once_t predicate; dispatch_once(&predicate,^{ sharedXXXManagerInstance = [[XXXManager alloc] initPrivate]; }); return sh

c++设计模式之单例模式下的实例自动销毁(垃圾自动回收器)

关于C++单例模式下m_pinstance指向空间销毁问题,m_pInstance的手动销毁经常是一个头痛的问题,内存和资源泄露也是屡见不鲜,能否有一个方法,让实例自动释放. 解决方法就是定义一个内部垃圾回收类,并且在Singleton中定义一个此类的静态成员.程序结束时,系统会自动析构此静态成员,此时,在此类的析构函数中析构Singleton实例,就可以实现m_pInstance的自动释放. 附上测试代码 1 #include <iostream> 2 using namespace std

CentOS下禁止ping和允许ping的方法

一.系统禁止ping [[email protected]黑客联盟~]# echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all 二.系统允许ping [[email protected]黑客联盟 ~]# echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all 此上两条命令的效果实时生效,可以用另外的机器ping来测试是否生效. ———————————————————————————————————- /etc/r

Linux下禁止ping最简单的方法

LINUX下禁止ping命令的使用 以root进入Linux系统,然后编辑文件icmp_echo_ignore_allvi /proc/sys/net/ipv4/icmp_echo_ignore_all将其值改为1后为禁止PING将其值改为0后为解除禁止PING 直接修改会提示错误: WARNING: The file has been changed since reading it!!!Do you really want to write to it (y/n)?y"icmp_echo_i

设计模式-单例模式下对多例的思考(案例:Server服务器)

前述: 在学习单例模式后,对老师课上布置的课后作业,自然要使用单例模式,但是不是一般的单例,要求引起我的兴趣,案例是用服务器. 老师布置的要求是:服务器只有一个,但是使用这个服务器时候可以有多个对象(原版的)和备份数据库,也就是至少要两个对象,因为有可能服务器对象会垮掉,所以要用备份的,所以这里要考虑调用时候,应该返回哪个服务器对象,还有当服务器对象垮掉后,应该怎么处理,保证用户的使用.老师说,两个对象是基本要求,如果能够控制多个对象,分数更高哦. 我觉得蛮有意思的题目,如果只考虑两个对象,无非

Spring component-scan 的逻辑 、单例模式下多实例问题、事务失效

原创内容,转发请保留:http://www.cnblogs.com/iceJava/p/6930118.html,谢谢 之前遇到该问题,今天查看了下 spring 4.x 的代码 一,先理解下 context:component-scan 处理过程: 1 <!-- scan the package and the sub package --> 2 <!-- 3 [重要]:容易产生事务失效的地方,见:http://jinnianshilongnian.iteye.com/blog/176

linux 下的init 0,1,2,3,4,5,6知识介绍

linux 下的init 0,1,2,3,4,5,6知识介绍 一. init是Linux系统操作中不可缺少的程序之一. 所谓的init进程,它是一个由内核启动的用户级进程. 内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程. 所以,init始终是第一个进程(其进程编号始终为1).内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init.如果内核找不到init

【linux 禁止ping设置】Linux下禁止ping最简单的方法

ping是一个通信协议,是ip协议的一部分,tcp/ip 协议的一部分.利用它可以检查网络是否能够连通,用好它可以很好地帮助我们分析判定网络故障.应用格式为:Ping IP地址.但服务启用ping有时候会造成很多麻烦. 因此有时候根据需要(如防止攻击),Linux服务器管理员可限制服务器禁止其它用户Ping.同时又保证Linux服务器又可以Ping其它服务器. 下面介绍linux下最简单的禁ping方法 首先登陆服务器终端之间执行:echo 1 > /proc/sys/net/ipv4/icmp

apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法

? 首先我们来看两段对上传目录设置无权限的列子,配置如下: <Directory "要去掉PHP执行权限的目录路径,如/upload"> ErrorDocument 404 /404/404.html ErrorDocument 403 /404/403.html <FilesMatch "\.(?i:php|php3|php4)$"> // ?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式,也可以写成:<