GCD单利传值

//
//  SharedInstance.h
//
//  Created by yy on 2016/12/12.
//  Copyright © 2016年 zg. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface SharedInstance : NSObject


/*
 ��参考:https:www.cnblogs.com/MasterPeng/p/5000516.html

 就我本身理解而言,我认为的单例:单例在整个工程中,就相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你在多少个界面中初始化调用了这个单例方法取得对象,它们所有的对象都是指向的同一块内存存储空间(即单例类保证了该类的实力对象是唯一存在的一个).

 “单例模式”是我们在iOS中最常使用的设计模式之一。单例模式不需要传递任何参数,就有效地解决了不同代码间的数据共享问题。单例类是一个非常重要的概念,因为它们表现出了一种十分有用的设计模式。单例类的应用贯穿于整个iOS的SDK中。例如,UIApplication类有一个方法叫sharedApplication,从任何地方调用这个方法,都将返回与当前正在运行的应用程序相关联的UIApplication实例。除了这个,NSNotificationCenter(消息中心) 、NSFileManager(文件管理) 、 NSUserDefaults(持久化存储数据) 、NSURLCache(请求缓存)、NSHTTPCookieStorage(应用程序cookies池)都是系统单例;

 单例类保证了应用程序的生命周期中有且仅有一个该类的实例对象,而且易于外界访问。

 单例模式的优点:

  1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
  2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程。
 */
+(SharedInstance*)sharedManager;
@property(nonatomic,copy)NSString * name;

@end

//
//  SharedInstance.m
//
//  Created by yy on 2016/12/12.
//  Copyright © 2016年 zg. All rights reserved.
//

#import "SharedInstance.h"

@implementation SharedInstance

+(SharedInstance*)sharedManager{
    //onceToken是GCD用来记录是否执行过,如果已经执行过就不再执行(保证执行一次)
    //一定注意dispatch_once_t变量必须是静态,它的值用于判断是否已经执行一次。
    //第二句和dispatch_once是固定用法,这样可以实现block内的代码一次性执行,也就是说只有第一次调用这个方法时才会实例化类,之后都是返回指针指向的值。
    static SharedInstance * sharedManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedManager = [[SharedInstance alloc] init];
    });
    return sharedManager;
}

@end
//
//  ViewController.m
//  -
//

#import "ViewController.h"
#import "SharedInstance.h"
@interface ViewController ()
@end

@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    // 存值
    [SharedInstance sharedManager].name = @"name";

    NSLog(@"%p",[SharedInstance sharedManager]);// 内存地址
    UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setTitle:@"name = ?" forState:UIControlStateNormal];
    button.backgroundColor = [UIColor lightGrayColor];
    button.frame = CGRectMake(100, 100, 100, 30);
    [button addTarget:self action:@selector(readName) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];

}

- (void)readName {
    NSLog(@"%p",[SharedInstance sharedManager]);// 和上面的同一内存地址
    NSLog(@"%@",[SharedInstance sharedManager].name);
}



@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值