码迷,mamicode.com
首页 > 移动开发 > 详细

ios笔记-单例文字代码详解

时间:2015-04-22 01:48:36      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

单例设计模式是ios开发中几大设计模式之一,每个项目中必有单例。下面我用文字加代码的方式讲一下单例模式。

1.我们简单的创建一个单例类

#import <Foundation/Foundation.h>

@interface SingloneTest : NSObject 

+ (id)shareInstance; 

@end

#import "SingloneTest.h" 

@implementation SingloneTest

+ (id)shareInstance

{

    static id shareInstance;  

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        shareInstance = [[NSObject alloc] init];

    });

@end

2.在appdelegate中,这样写

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

     NSLog(@"~~~~%@~~~~~~",[SingloneTest shareInstance]);

    return YES;

}

打印结果:

SingloneDomo[5469:104528] ~~~~<NSObject: 0x7fff32e0d560>~~~~~~

3.在控制器里再次创建单例类

- (void)viewDidLoad {

    [super viewDidLoad];

    NSLog(@"~~~~%@~~~~~~",[SingloneTest shareInstance]);

}

打印结果:

SingloneDomo[5469:104528] ~~~~<NSObject: 0x7fff32e0d560>~~~~~~

两次的打印结果相同,证明是一个对象实例,所以在整个工程中,单例可以跳过多个控制器,记录自己的状态,不需要逐个页面进行传值。

有同学问,问什么这样创建的单例,在方法执行结束没有被销毁呢?因为 static id shareInstance; static把单例对象指针放在了静态储存区,使数据持久化,程序开始就进行初始化,且只初始化一次,不随runtime机制进行销毁。所以每次调用+ (id)shareInstance; 方法,其实都是取同一个SingloneTest对象。

ios笔记-单例文字代码详解

标签:

原文地址:http://www.cnblogs.com/rankilau/p/4446041.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!