zoukankan      html  css  js  c++  java
  • ios笔记-单例文字代码详解

    单例设计模式是ios开发中几大设计模式之一,每个项目中必有单例。下面我用文字加代码的方式讲一下单例模式。

    1.我们简单的创建一个单例类

    声明文件

    #import <Foundation/Foundation.h>

    @interface SingloneTest : NSObject 

    //单例对象创建方法

    + (id)shareInstance; 

    @end

    实现文件

    #import "SingloneTest.h" 

    @implementation SingloneTest

    + (id)shareInstance

    {

        static id shareInstance;  

        static dispatch_once_t onceToken;

        dispatch_once(&onceToken, ^{

            shareInstance = [[NSObject alloc] init];

        });

    return shareInstance;

    }

    @end

    2.在appdelegate中,这样写

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    //打印一下单例对象

         NSLog(@"~~~~%@~~~~~~",[SingloneTest shareInstance]);

        return YES;

    }

    打印结果:

    SingloneDomo[5469:104528] ~~~~<NSObject: 0x7fff32e0d560>~~~~~~

    3.在控制器里再次创建单例类

    - (void)viewDidLoad {

        [super viewDidLoad];

    //打印一下单例对象

        NSLog(@"~~~~%@~~~~~~",[SingloneTest shareInstance]);

    }

    打印结果:

    SingloneDomo[5469:104528] ~~~~<NSObject: 0x7fff32e0d560>~~~~~~

    两次的打印结果相同,证明是这两个单例对象其实是一个对象,所以在整个工程中,可以随意调用这个单例对象,单例可以跳过多个控制器,记录自己的状态,不需要逐个页面进行传值。(比如说一个播放器对象,在A页面正在播放音乐,状态是isPlaying,退出A页面后,你肯定不想让这个播放器对象销毁,如果被销毁的话,音乐就停止播放了,所以就要用到单例,跳出页面后,单例也不会销毁,而且状态还是isPlaying,这样就愉快了!)

    有同学问,问什么这样创建的单例,在方法执行结束没有被销毁呢?因为 static id shareInstance; static把单例对象指针放在了静态储存区,使数据持久化,程序开始就进行初始化,且只初始化一次,不随runtime机制进行销毁。所以每次调用+ (id)shareInstance; 方法,其实都是取同一个SingloneTest对象。

  • 相关阅读:
    口袋摸球
    后渗透(四)数据包捕获
    后渗透(二)权限提升
    文件上传11-21
    MySQL之UDF提权
    《白帽子讲Web安全》读书笔记(一)
    XSS盲打获取cookies&&XSS钓鱼&&XSS键盘记录
    nginx目录穿越漏洞复现&&nginx目录遍历漏洞复现
    python教程(一)·简介
    DataPipeline如何实现数据质量管理?
  • 原文地址:https://www.cnblogs.com/rankilau/p/4446041.html
Copyright © 2011-2022 走看看