// 要实现单例传值,那就必须得新建一个类做为单例

  • 提供创建该类对象的类方法(因为是要在alloc开辟内存空间后赋值)。所有在.h文件中声明该方法

+ (instancetype)defaultUIImageView;


  • 实现该方法
  • 前提得有一个静态全局变量来保存该类对象的指针

// 静态全局变量

static DefaultValueViewController *singleton;

// 提供方法创建单例对象

#pragma mark - defaultUIViewController

+ (instancetype)defaultUIViewController

{

// 懒加载

if (!singleton)

{

singleton = [[DefaultValueViewController alloc] init];

}

return singleton;

}


  • 堵缺口

// 1.堵缺口:避免不是调用你提供的方法创建对象,注意些保证其它方式创建的对象都是同一个

#pragma mark - allocWithZone

+ (instancetype)allocWithZone:(struct _NSZone *)zone

{

if (!singleton)

{

singleton = [super allocWithZone:zone];

}

return singleton;

}


  • 堵缺口

// 2.堵缺口:copy方法为对象方法,因此直接返回它的指针就行

  • 注意:因为此时创建的单例不是直接继承至NSObject而是UIImageView,因此默认是遵循了<NSCopying>协议的

#pragma mark - copy

- (id)copy

{

return self;

}

#pragma mark - Xcode


  • 三个类对比
  • 1.创建对象给一些属性赋值,并在点击屏幕时推送到下一页

  • 2.第二个页面创建的对象和上个页面地址完全一样,如果没有修改属性,将会具有是个页面的属性

  • 一个页面属性修改,所有页面都会一样:直接添加对象就会得到第二页所有的属性

iOS多页面传值方式之单例传值singleton的更多相关文章

  1. iOS 用宏定义写一个单例(Singleton)

    用如下方法定义单例 @interface singleton_interface(ClassName); @end 实现单例在 @implemention singleton_implemention ...

  2. iOS 页面间传值 之 单例传值 , block 传值

    ios 页面间传值有许多,前边已经分享过属性传值和代理传值,今天主要说一下单例传值和 block 传值 单例传值:单例模式一种常用的开发的模式,单例因为在整个程序中无论在何时初始化对象,获取到的都是同 ...

  3. iOS 页面跳转传值,属性传值,代理传值,代码块传值,单例传值,通知传值

    有时候我们在页面跳转的时候回传递相应的参数,如,你想把在第一个页面的文本框里的内容显示在第二个文本框中,或者你又想把第二个文本框中的内容改变之后到第一个页面的文本框中,所有,这个时候我们就要用到页面跳 ...

  4. 属性传值,协议传值,block传值,单例传值四种界面传值方式

    一.属性传值 对于属性传值而言,相对于其它的三种 方法来说,是最基础,最简单的一种 方法,但,属性传值 有很大的局限性,因为是适用于第一个界面向第二个界面传 值,第二个向第三个界面传值等等.N界面向N ...

  5. iOS - 单例传值 (一)

    点击打开链接    iOS - 单例传值 (二) 单例只会对某个类实例化一次/单例类,对单例这个类实例化一次有且仅有一个对象 你单例初始化,只能初始化一次,然后你指向的对象,其实都是指向一个内存地址, ...

  6. 传值 属性 block 单例 协议

    界面传值 四种传值的方式 1.属性传值(从前往后) 步骤: 1.属性传值用于第一个界面向第二个界面传值 2.明确二者联系的桥梁,也就是触发跳转的地方 3.明确传输的值,类型是什么 4.在第二个视图控制 ...

  7. 四大传值详解:属性传值,单例传值,代理传值,block传值

    一:属性传值 传值情景:从前一个页面向后一个页面传值 a.在后一个页面,根据传值类型和个数,写属性 b.在前一个页面, 为属性赋值 c.在后一个页面, 使用值 例如: 第一个视图: #import & ...

  8. IOS设计模式学习(7)单例

    1 前言 数学与逻辑学中,singleton定义为“有且仅有一个元素的集合”.因此不管袋子有多大,每次从里面取出弹子的时候,拿到的都是同一个. 2 详述 2.1 简述 面向对象应用程序中的单例类(si ...

  9. 设计模式的征途—1.单例(Singleton)模式

    单例模式属于创建型模式的一种,创建型模式是一类最常用的设计模式,在软件开发中应用非常广泛.创建型模式将对象的创建和使用分离,在使用对象时无需关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修 ...

随机推荐

  1. rownum使用方法

    rownum使用方法: .使用rownum子查询: rownum是一个总是从1开始的伪列,当查询条件rownum)时,不能从数据库查到记录,因此要 通过子查询解决:; 结果: SQL; R ID US ...

  2. h3c dhcp snooping

    1. 组网需求Switch B通过以太网端口Ethernet1/1连接到DHCP服务器,通过以太网端口Ethernet1/2.Ethernet1/3连接到DHCP客户端.要求:l与DHCP服务器相连的 ...

  3. Django 用户认证及OneToOneField

    Django 用户认证如果自己不想写 就可以用django自带的认证 首选导入模块 models.py #!/usr/bin/env python #_*_ coding:utf8 _*_ from ...

  4. 使用HAXM加速Android虚拟机

    Android虚拟机在支持Intel VT技术的CPU上,可以使用HAXM(Hardware Accelerated Execution Manager)得到硬件加速支持,使得虚拟机运行速度得到极大提 ...

  5. iOS8中的动态文本

    原文链接 : Swift Programming 101: Mastering Dynamic Type in iOS 8 原文作者 : Kevin McNeish Apple声称鼓励第三方App能够 ...

  6. DrawerLayout和ActionBarDrawerToggle

    说明:DrawerLayout的作用就是左侧滑出.右侧滑出菜单.需要和ActionBarDrawerToggle来配合使用.如果对ActionBar不理解,请先熟悉ActionBar. 1.首先配置D ...

  7. javascript语句语义大全(3)

    1. for(var i=0;i<10;i++){ } for循环,括号里面是循环条件,翻译过来是,初始设定1=0:没循环一次i会+1,直到i<10 2. var i=0: while(i ...

  8. HDU2216:Game III(BFS)

    Game III Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Subm ...

  9. asp 随机生成字符

    <%function rndNumLetters(num) randomize dim num0,num1,num2,num3,pass if num = "" or not ...

  10. php简单命令代码集锦

    if(file_exists("file.htm"))// 检查是否存在此文件 if(file_exists("chat"))//检查是否存在此文件夹 rena ...