找回密码

碧海潮声大学生网

查看: 169|回复: 0
打印 上一主题 下一主题

Objective-C单例模式

[复制链接]
跳转到指定楼层
1#
发表于 2015-3-16 11:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

单例类是一种特殊的类,在一个进程种只会存在一个该类的对象,在iOS应用中只会出现一个对象。这种设计模式在系统框架中许多地方都使用了,如NSFileManager、UIApplication等。

  • 在ARC的环境下,接口文件为:////  DVISingleton.h////  Copyright (c) 2014 长沙戴维营教育. All rights reserved.//#import @interface DVISingleton : NSObject+ (instancetype)sharedSingleton;@end

    实现文件:

    ////  DVISingleton.m////  Copyright (c) 2014 长沙戴维营教育. All rights reserved.//#import "DVISingleton.h"@implementation DVISingleton+ (instancetype)sharedSingleton{    static DVISingleton *sharedObject = nil;    //线程安全,只允许执行依次    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        //使用父类的allocWithZone:方法创建对象        sharedObject = [[super allocWithZone:NULL] init];    });    return sharedObject;}- (id)init{    if (self = [super init]) {    }    return self;}+ (id)allocWithZone:(struct _NSZone *)zone{    return [self sharedSingleton];}www.2cto.com- (id)copy{    return self;}- (void)dealloc{}@end
    • 在非ARC环境下的实现文件:#import "DVISingleton.h"@implementation DVISingleton+ (instancetype)sharedSingleton{    static DVISingleton *sharedObject = nil;    //线程安全,只允许执行依次    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        //使用父类的allocWithZone:方法创建对象        sharedObject = [[super allocWithZone:NULL] init];    });    return sharedObject;}+ (id)allocWithZone:(NSZone *)zone {  return [[self sharedSingleton] retain];}- (id)copyWithZone:(NSZone *)zone {  return self;}- (id)retain {  return self;}- (unsigned)retainCount {  return UINT_MAX; //denotes an object that cannot be released}- (oneway void)release {  // never release}- (id)autorelease {  return self;}- (id)init {  if (self = [super init]) {  }  return self;}- (void)dealloc {  [super dealloc];}@end


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋| 碧海潮声大学生网  

Copyright © 2001-2013 Comsenz Inc.   All Rights Reserved.

Powered by Discuz! X3.2( 浙ICP备11026473号 )

快速回复 返回顶部 返回列表