iOS 单例的正确姿势

static HLTestObject *instance = nil;

+ (instancetype)sharedInstance

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        instance = [[[self class] alloc] init];

        instance.height = 10;

        instance.object = [[NSObject alloc] init];

        instance.arrayM = [[NSMutableArray alloc] init];

    });

    return instance;

}

+ (instancetype)allocWithZone:(struct _NSZone *)zone

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        instance = [super allocWithZone:zone];

    });

    return instance;

}

- (NSString *)description

{

    NSString *result = @"";

    result = [result stringByAppendingFormat:@"<%@: %p>",[self class], self];

    result = [result stringByAppendingFormat:@" height = %d,",self.height];

    result = [result stringByAppendingFormat:@" arrayM = %p,",self.arrayM];

    result = [result stringByAppendingFormat:@" object = %p,",self.object];

    return result;

}

 

 

2016-05-23 13:29:14.856 PractiseProject[3909:99058] <hltestobject: 0x7fa72270c570> 

height = 20, arrayM = 0x7fa722716c10, object = 0x7fa7227140e0,

2016-05-23 13:29:14.856 PractiseProject[3909:99058] <hltestobject: 0x7fa72270c570> 

height = 20, arrayM = 0x7fa722716c10, object = 0x7fa7227140e0,

2016-05-23 13:29:14.856 PractiseProject[3909:99058] 

<hltestobject: 0x7fa72270c570> 

height = 20, arrayM = 0x7fa722716c10, object = 0x7fa7227140e0,

</hltestobject: 0x7fa72270c570>

</hltestobject: 0x7fa72270c570></hltestobject: 0x7fa72270c570>

 

 

 

或者:

 

static HLTestObject *instance = nil;

+ (instancetype)sharedInstance

{

    return [[self alloc] init];

}

 

- (instancetype)init

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        instance = [super init];

        instance.height = 10;

        instance.object = [[NSObject alloc] init];

        instance.arrayM = [[NSMutableArray alloc] init];

    });

    return instance;

}

 

+ (instancetype)allocWithZone:(struct _NSZone *)zone

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        instance = [super allocWithZone:zone];

    });

    return instance;

}

 

- (NSString *)description

{

    NSString *result = @"";

    result = [result stringByAppendingFormat:@"<%@: %p>",[self class], self];

    result = [result stringByAppendingFormat:@" height = %d,",self.height];

    result = [result stringByAppendingFormat:@" arrayM = %p,",self.arrayM];

    result = [result stringByAppendingFormat:@" object = %p,",self.object];

    return result;

}

 

2016-05-23 13:31:44.824 PractiseProject[3939:100662] <hltestobject: 0x7fa9da711a70> 

height = 20, arrayM = 0x7fa9da707ca0, object = 0x7fa9da70a940,
2016-05-23 13:31:44.825 PractiseProject[3939:100662] <hltestobject: 0x7fa9da711a70> 

height = 20, arrayM = 0x7fa9da707ca0, object = 0x7fa9da70a940,
2016-05-23 13:31:44.825 PractiseProject[3939:100662] <hltestobject: 0x7fa9da711a70> 

height = 20, arrayM = 0x7fa9da707ca0, object = 0x7fa9da70a940,

</hltestobject: 0x7fa9da711a70></hltestobject: 0x7fa9da711a70>

</hltestobject: 0x7fa9da711a70>

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值