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

iOS 学习笔记——0008(单例模式)

时间:2015-10-30 00:41:00      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:

1.什么是单例模式?

通俗的说就是:一个类,只能实例化一次

2.什么情况下用单例模式?

①创建实例时会给程序造成资源的浪费,而且实例越多也不好控制。

②不同的线程调用时,可能会引起不同步的现象。

③多个模块之间都要访问的实例

④其他...

3.简单实现

下面以一个Student类来举例说明

@interface Student : NSObject
+ (instancetype) sharedStudent;
@end

#import "Student.h"
static Student* __stu;
@implementation Student
+ (instancetype)sharedStudent
{
    if (__stu == nil) {
        __stu = [[Student alloc]init];
    }
    return __stu;
}
@end

上面这个例子是一个最简单的一个单例实现(只是为了说明什么是单例)

下面提供一个偷懒的方法,也是实际工作中常用的方法,用宏来定义单例的声明与定义

#define SYNTHESIZE_SINGLETON_FOR_HEADER(className) \
+ (className *)shared##className;

#define SYNTHESIZE_SINGLETON_FOR_CLASS(className) \
+ (className *)shared##className { static className *shared##className = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ shared##className = [[self alloc] init]; }); return shared##className; }
//使用dispatch_once,这个方法的意思是在应用程序生命周期内,这方法只执行一次,这就是ARC下结合GCD的一个单例的代码

 

使用时,只需要在头文件中与实现文件中写入对应的代码即可

还拿Student举例说明,这里我将这个宏定义单独放到一个头文件中Singleton.h

#import <Foundation/Foundation.h>
#import "Singleton.h"
@interface Student : NSObject
SYNTHESIZE_SINGLETON_FOR_HEADER(Student);
@end

#import "Student.h"
@implementation Student
SYNTHESIZE_SINGLETON_FOR_CLASS(Student);
@end

 

iOS 学习笔记——0008(单例模式)

标签:

原文地址:http://www.cnblogs.com/amazinglin/p/4922108.html

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