ios之单例类的创建实现与使用技巧总结

首先讲下单例类能够实现的功能,也是在项目中经常可以用到的。因为单例是全局哪里要用直接调用就行非常方便简单,一般我们可以用单例来作对用户信息的存储,其次单例可以做成购物车之类的页面等等。当然单例最大的优势个人感觉就是对数据的存储和读取非常方便,就可以解决页面之间传值困难的问题。简单讲下怎样用单例对数据传输吧,把需要的数据都定义成属性,当需要存储的时候直接调用存储就行,要用的时候把它调出使用就行了这里不做过多描述了。


下面用个简单地demo来详细介绍实现过程   (工程采用非ARC模式) xcode5 只需要把头文件导入Supporting Files 里面.h预编译头文件  既可以全局任意类访问   自从xcode6取消了这个文件所以需要当你需要使用的时候就需要导入下


#import "SuperMan.h"

static SuperMan *superman = nil;// 定义全局静态变量

@implementation SuperMan

// 重写alloc 方法封堵创建方法(调用alloc方法时 默认会走allocWithZone这个方法 所以只需封堵allocWithZone 方法即可)
+ (id)allocWithZone:(struct _NSZone *)zone
{
    if (!superman) {
        superman = [super allocWithZone:zone];//如果没有实例让父类去创建一个
        return superman;
    }
    return nil;
}

+ (SuperMan *)shareSuperman  //定义一个类方法进行访问(便利构造)
{
    if (!superman) {
        superman = [[SuperMan alloc]init];// 如果实例不存在进行创建
    }
    return superman;
}

- (id)retain //(非ARC有效)封堵retain 方法  单例不能被其他对象持有
{
    return self;
}
- (oneway void)release //(非ARC有效) 封堵release 方法 (让单例不被释放)
{
    
}
- (NSUInteger)retainCount  //(非ARC有效)
{
    return NSUIntegerMax;
}
// 封堵深复制 (copy 和 mutablecopy 都可以实现深复制 但他们最终都需要调用copyWithZone方法所以直接封堵它)
- (id)copyWithZone:(struct _NSZone *)zone
{
    return self;
}

@end

以上都是个人理解,本人也是菜鸟,有理解不对的地方希望大家指出,同时也希望能对大家起到一定的帮助!! Thank you!



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值