IOS单例模式(MRC下和ARC下)

LSSingleInsten.h

#import <Foundation/Foundation.h>
@interface LSSingleInsten : NSObject
@property (nonatomic,assign) NSInteger Value;
+ (LSSingleInsten*)CreateInsten;
@end

LSSingleInsten.m

#import "LSSingleInsten.h"
static LSSingleInsten *shareInsten = nil;
@implementation LSSingleInsten
+ (LSSingleInsten*)CreateInsten
{
    if (shareInsten == nil) {
        shareInsten = [[self alloc]init];
    }
    return shareInsten;
}
//以下都是防止实例不是唯一的一些方法,是通用格式,不必死记硬背,可以直接拷贝到任何单例模式中
这是在调用alloc时可防止重复创建实例
+(id)allocWithZone:(NSZone *)zone{
    if (shareInsten==nil) {
       // shareInsten=[super allocWithZone:zone];
        shareInsten = [super allocWithZone:zone];
    }
    return shareInsten;
}
//这是在拷贝对象时防止重复创建
-(id)copyWithZone:(NSZone *)zone{
    return shareInsten;
}
//这是在retain对象时防止重复创建,当然在ARC开启时可省略这个
-(id)retain{
    return shareInsten;
}
//在release时什么都不做,因为一共就一个实例,不重复引用,所以不能release
-(oneway void)release{
}
//在autorelease时,返回实例,在ARC下客省略
-(id)autorelease{
     return shareInsten;
}
//返回的时无符号整型,即大于0的数字,在ARC下可省略
-(NSUInteger)retainCount{
    return UINT_MAX;
}
@end

main.m


#import <Foundation/Foundation.h>
#import "LSSingleInsten.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        LSSingleInsten *lsinsten = [LSSingleInsten CreateInsten];
        lsinsten.Value = 100;
        NSLog(@"%@",lsinsten);
        NSLog(@"%@",[LSSingleInsten CreateInsten]);
        NSLog(@"%ld",lsinsten.Value);        
        LSSingleInsten *lsinsten2 = [LSSingleInsten CreateInsten];
        NSLog(@"%@",lsinsten2);
        NSLog(@"%@",[LSSingleInsten CreateInsten]);
        NSLog(@"%ld",lsinsten2.Value);      
        LSSingleInsten *lsinsten3 = [[LSSingleInsten alloc]init];
        NSLog(@"%@",lsinsten3);
        NSLog(@"%ld",lsinsten3.Value);      
        LSSingleInsten *lsinsten4 = [lsinsten copy];
        NSLog(@"%@",lsinsten4);
        NSLog(@"%ld",lsinsten4.Value);    
    }
    return 0;
}

测试结果:

 <LSSingleInsten: 0x1003023a0>

 <LSSingleInsten: 0x1003023a0>

 100

 <LSSingleInsten: 0x1003023a0>

 <LSSingleInsten: 0x1003023a0>

 100

 <LSSingleInsten: 0x1003023a0>

 100

<LSSingleInsten: 0x1003023a0>

 100


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值