天天看点

ios之单例模式

单例模式是iOS开发中非常重要的一种模式,一般用在只允许创建一个变量的地方,什么地方只允许创建一个变量呢?例如手机上的硬件对象:相机、GPS、蓝牙等。如果要使用这些硬件对象,就只能共享一个资源。。。千万不要以为这些硬件对象可以多次alloc出来,当成多个对象来使用,那是不可能的,因为这些硬件只有一个。这种情况下就需要用到单例模式了,创建单例模式的方法有很多种,ios4前后是不一样的,在这里我用一种最简单、易懂的方法,也就是通过GCD的方式来创建单例模式。

分为三步来创建:

第一步:

创建一个共享实例的静态变量

ios之单例模式

使用静态变量可以使这个实例能够在程序生命周期内一直存活,提供给程序使用,当然你也可以用全局变量来代替静态变量,但还是建议最好使用静态变量,防止文件导入时

命名冲突。

第二步:

创建shareInstance方法来实现单例

ios之单例模式

dispatch_once的作用时确保block里面的函数只执行一次,并保证了多线程访问时的安全性,这点在多线程的情况非常重要,因为继续有所程序都是多线程运行的,因此确保多线程访问安全是很有必要的。这里注意红线部分画出的super,千万不要用self啊,否则会造成循环引用,程序卡死,不信自己可以试试。(也不要将allocWithZone换成alloc,因为allocWithZone是和下面重写的方法对应的)

下面重写两个方法即可:

ios之单例模式

重写的第一个方法是为了防止如果使用alloc和init方法来创建了一个对象,造成单例被分配了多个不同的内存空间,这是不允许发生的。

重写的第二个方法,是为了防止使用copy时复制对象造成单例又被多次分配,当然一般情况下这个函数用不着,你也可以不重写。但第一个必须重写!

到此为止,单例模式就写好了,下面来开看看打印结果:

ios之单例模式
ios之单例模式

内存地址空间都是一样的吧。。