前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【OC加强】辛格尔顿和[NSFileManager defaultMagager]以及其他设计模式

【OC加强】辛格尔顿和[NSFileManager defaultMagager]以及其他设计模式

作者头像
全栈程序员站长
发布2022-07-05 21:36:23
2440
发布2022-07-05 21:36:23
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君

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

代码语言:javascript
复制
        NSFileManager *file1=[NSFileManager defaultManager];
        NSFileManager *file2=[NSFileManager defaultManager];
        NSLog(@"%@,%@",file1,file2);

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

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

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

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface Person : NSObject

+(Person *)defaultPerson;
@end

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

代码语言:javascript
复制
#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中

代码语言:javascript
复制
#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原则游泳池。

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117548.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月4,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档