• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Objective-C中单例模式的实现【转】

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

单例模式在Cocoa和Cocoa Touch中非常常见。比如这两个,[UIApplication sharedApplication][NSApplication sharedApplication],大家应该都见过。但是我们应该如何在代码中实现一个单例模式呢?

如果你对苹果的文档很熟悉的话,你一定知道,在Cocoa Foundamentals Guide中有一段实现单例模式的示例代码。大致如下:

1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            
/* Singleton.h */
            #import <Foundation/Foundation.h>
            
            @interface Singleton : NSObject
            + (Singleton *)instance;
            @end
            
            /* Singleton.m */
            #import "Singleton.h"
            static Singleton *instance = nil;
            
            @implementation Singleton
            
            + (Singleton *)instance {
                if (!instance) {
                    instance = [[super allocWithZone:NULL] init];
                }
                return instance;
            }
            
            + (id)allocWithZone:(NSZone *)zone {
                return [self instance];
            }
            
            - (id)copyWithZone:(NSZone *)zone {
                return self;
            }
            
            - (id)init {
                if (instance) {
                    return instance;
                }
                self = [super init];
                return self;
            }
            
            - (id)retain {
                return self;
            }
            
            - (oneway void)release {
                // Do nothing
            }
            
            - (id)autorelease {
                return self;
            }
            
            - (NSUInteger)retainCount {
                return NSUIntegerMax;
            }
            
            @end
            

这是一种很标准的Singleton实现,中规中矩。不过这种实现并不是线程安全的。所以各路大神都各显神威,给出了多种单例模式的实现。

Matt Gallagher在博客中放出了一个Macro,用来实现单例模式。虽然是一个宏定义的代码,但是具体实现还是很清楚的。代码如下:

1
            2
            
                      

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Objective-C语法之代码块(block)的使用(转载)发布时间:2022-07-12
下一篇:
如何利用Objective-C写一个精美的DSL发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap