【OC加强】单例模式与[NSFileManager defaultMagager]以及其他设计模式

本文介绍了单例模式的实现方式及其在Objective-C中的应用,通过具体的代码示例讲解了如何利用静态变量创建单例,并对比了不同设计模式的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在使用文件操作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池原理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值