ios~单例模式:

 我来答
世纪网络17
2022-07-24 · TA获得超过5951个赞
知道小有建树答主
回答量:2426
采纳率:100%
帮助的人:143万
展开全部

在iOS OC中,一般我们都是用官方推荐的写法来写单例:GCD方式单例

URLManager* a = [URLManager sharedInstance];
接下来,可以用 a 这个单例来干很多事情了,看起来没有问题。在很多实际的项目中,很多人也的确是这么做的。

可是,谁能保证所有人都会使用 sharedInstance 方法来创建对象?而一旦有人用 alloc,new 等来创建对象,这就不是单例了。
例如:

查看 a、b、c :

可以看到, a、b、c 不是同一个对象,而所谓单例,就是不管我用何种方法创建对象,都必须是同一个
所以,单例模式,绝不是一个 sharedInstance 就够了。

解决方案 一
那么如何避免这种问题呢?我们知道:
在对象创建的时候,无论是 alloc 还是 new,都会调用到 allocWithZone: 方法;
使用拷贝创建对象时,会调用 copyWithZone:,mutableCopyWithZone:方法;
那么,重写这些方法,就可以让创建的对象唯一。

再运行,看一看a、b、c:

都是同一个对象!大功告成!

解决方案 二
此外,还有一种方法,就是直接禁用掉 alloc、new 、copy等方法:

如此,在调用这些方法时就会报错,提示使用 sharedInstance 方法:

以此,也可以达到单例模式的要求,始终只有一个对象。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式