zoukankan      html  css  js  c++  java
  • 【OC加强】辛格尔顿和[NSFileManager defaultMagager]以及其他设计模式

    我们在工作中使用文件NSFileManager上课时间,创建发现1对象,此2同样的对象地址:

            NSFileManager *file1=[NSFileManager defaultManager];
            NSFileManager *file2=[NSFileManager defaultManager];
            NSLog(@"%@,%@",file1,file2);

    核心是:这个类的defaultManager方法利用的是一种单例模式,即仅仅要这个程序还在执行。那么整个执行期间仅仅能存在1个单例,即1个实例对象。


    怎样实现的呢?我们模拟一下。

    (1)首先在Person.h中声明一个方法。

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    +(Person *)defaultPerson;
    @end

    (2)然后在Person.m中实现(关键)

    #import "Person.h"
    
    @implementation Person
    //利用静态变量创建单例模式
    //静态变量是仅仅有当整个程序结束执行时才会release释放
    static Person * person=nil;
    
    //该函数的作用是,当类调用该方法时,始终仅仅返回同一个对象,即仅仅创建1个对象。假设创建其它对象,它们也是相同地址
    +(Person *)defaultPerson{
        if (person==nil) {
            person=[[self alloc]init];
        }
        return person;
    }
    @end

    (3)然后就能够使用了。比方在main.m中

    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[]) {
    
        @autoreleasepool {
            Person *p1=[Person defaultPerson];
            Person *p2=[Person defaultPerson];
            //打印的两个地址是同样的,这就是单例模式的应用
            NSLog(@"%@,%@",p1,p2);
        }
        return 0;
    }

    除了单例设计模式之外。还有几种设计模式,总结:

    ——组合模式(聚合模式)。就是一个对象里面包括了另外一个对象。

    ——单例模式:如上。

    ——策略模式:用在封装变化点。比方我们定义一个有两个数+1个运算符号的方法,运算符号能够是+、-、*、/。所以这个封装变化点就在运算符号这边。我们能够用一个block方法来实现,这就是一种策略模式。

    ——向上抽象:就是protocol协议设计模式

    ——享元设计模式:就是NSString创建一个abc后,再创建一个abc时它会到池子中找到假设有就会直接取出来原本的abc,这相当于NSString原则游泳池。


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    php.ini中设置session过期时间
    IP(Internet Protocal) 地址 说明
    html年月日下拉联动菜单 年月日三下拉框联动
    使用数组的键值,做为变量名的方法
    html中js只允许输入数字
    阿里云服务器问题攻略
    小帆远行
    Android图片转换类 1. Bitmap去色,转换为黑白的灰度图, 2. Bitmap图片加圆角效果
    EditText禁止输入回车
    Android之系统自带的文字外观设置
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4645166.html
Copyright © 2011-2022 走看看