Objective-C中的单例模式

单例类:ApplicationContext.h文件

#import <Foundation/Foundation.h>

@interface ApplicationContext : NSObject<NSCopying>
@property (nonatomic,copy) NSString *userName;
@property (nonatomic,copy) NSString *passWord;
@property (nonatomic,copy) NSMutableDictionary *dictData;

+(id)shareApplicationContext;
@end


单例类:ApplicationContext.m文件

#import "ApplicationContext.h"

static ApplicationContext *appcationContext =nil;
@implementation ApplicationContext

//自定义的一个类方法
+(id)shareApplicationContext{

    NSLog(@"share:appcationContext = %@",appcationContext);
    //判断当前类的实例是否为空,如果为空了,创建
    if(appcationContext == nil){
        //实例化当前的类的对象
        appcationContext = [[[self class] alloc] init];
        return appcationContext;
        
    }
    //否则直接返回
    return appcationContext;
}

//覆盖父类的alloc方法
+ (id)allocWithZone:(struct _NSZone *)zone{
    NSLog(@"alloc:appcationContext = %@",appcationContext);
    //判断当前类的实例是否为空,如果为空了,创建
    if(appcationContext == nil){
    
        NSLog(@"对象第一次被创建~");
        //实例化当前的类的对象
        appcationContext = [super allocWithZone:zone];
        return appcationContext;
    }
    //否则直接返回
    return appcationContext;
}

//覆盖copy方法,防止copy此对象产生新的实例
- (id)copyWithZone:(NSZone *)zone{

    NSLog(@"copy");
    return self;

}

//也不让修改引用计数
-(id)retain{
    return appcationContext;
}
//永远返回最大的整数
-(NSUInteger)retainCount{
    //返回最大整数
    return UINT_MAX;
}

//覆盖autorelease方法
-(id)autorelease{

    return appcationContext;
}

//覆盖release方法
-(oneway void)release{
    

}


- (void)dealloc
{
    [_userName release];
    [_passWord release];
    [_dictData release];
    [super dealloc];
}

@end


测试类:main.m文件


#import <Foundation/Foundation.h>
#import "ApplicationContext.h"
#import "Person.h"
#import "Student.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        //实例化单例的类
        ApplicationContext *appContext = [ApplicationContext shareApplicationContext];
        appContext.userName =@"admin";
        appContext.passWord =@"123456";
        //先定义一个字典
        NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2", nil];
        [dict setValue:@"v3" forKey:@"k3"];
        //设置字典
        appContext.dictData = dict;
        
//        //实例化单例的类
//        ApplicationContext *appContext2 = [ApplicationContext shareApplicationContext];
//        ApplicationContext *appContext3 = [[ApplicationContext alloc] init];
//        ApplicationContext *appContext4 = [appContext copy];
//        
//        NSLog(@"appContext4 %@",appContext3.userName);
        
        Person *p = [[Person alloc] init];
        p.pid = 1234;
        [p test];
        
        NSLog(@"username : %@",appContext.userName);
        
        
        Student *stu = [[Student alloc] init];
        stu.sid = 45678;
        [stu stuTest];
        
        
    }
    return 0;
}

测试类:Person.h文件


#import <Foundation/Foundation.h>

@interface Person : NSObject
@property (nonatomic,assign) int pid;
-(void)test;
@end


测试类:Person.m文件

#import "Person.h"
#import "ApplicationContext.h"

@implementation Person
-(void)test{

    NSLog(@"person id :%d",_pid);
    ApplicationContext *appContext1 = [[ApplicationContext alloc] init];
    NSLog(@"person name :%@,password = %@",appContext1.userName,appContext1.passWord);
    
    //appContext1.dictData 从单例模式的类中获取的
    NSMutableDictionary *dict2 = appContext1.dictData;
    //重新修改字典的内容
    //[dict2 setValue:@"new" forKey:@"k4"];
    appContext1.userName  = @"person";
    
    NSLog(@"dictdata %@",dict2);

}
@end


测试类:Student.h文件

#import <Foundation/Foundation.h>

@interface Student : NSObject
@property int sid;
-(void)stuTest;
@end


测试类:Student.m文件

#import "Student.h"
#import "ApplicationContext.h"

@implementation Student
-(void)stuTest{

    NSLog(@"stu id :%d",_sid);
    ApplicationContext *appContext = [ApplicationContext shareApplicationContext];
    NSLog(@"student username :%@",appContext.userName);


}
@end




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值