• 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.第二个页面创建的对象和上个页面地址完全一样,如果没有修改属性,将会具有是个页面的属性

        

    • 一个页面属性修改,所有页面都会一样:直接添加对象就会得到第二页所有的属性
  • 相关阅读:
    UVa 1451 Average (斜率优化)
    POJ 1160 Post Office (四边形不等式优化DP)
    HDU 3507 Print Article (斜率DP)
    LightOJ 1427 Substring Frequency (II) (AC自动机)
    UVa 10245 The Closest Pair Problem (分治)
    POJ 1741 Tree (树分治)
    HDU 3487 Play with Chain (Splay)
    POJ 2828 Buy Tickets (线段树)
    HDU 3723 Delta Wave (高精度+calelan数)
    UVa 1625 Color Length (DP)
  • 原文地址:https://www.cnblogs.com/pruple/p/5280539.html
Copyright © 2020-2023  润新知