zoukankan      html  css  js  c++  java
  • iOS多页面传值方式之单例传值singleton

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

    • 提供创建该类对象的类方法(因为是要在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.第二个页面创建的对象和上个页面地址完全一样,如果没有修改属性,将会具有是个页面的属性

        

    • 一个页面属性修改,所有页面都会一样:直接添加对象就会得到第二页所有的属性
  • 相关阅读:
    sql笔记
    虚函数和抽象类笔记
    构造函数和静态构造函数 笔记
    在与sql server 建立连接时出现与网络相关的或特定于实例的错误
    类型转换 笔记
    test
    document.body和document.documentElement比较
    sql2005 存储过程实现分页
    新闻发布用到的存储过程和触发器
    SQL数据查询实例1
  • 原文地址:https://www.cnblogs.com/pruple/p/5280539.html
Copyright © 2011-2022 走看看