OC 单例

1利用GCD方式实现单例(ARC)

#import "People.h"

@implementation People
static id _instace;
+(id)allocWithZone:(struct _NSZone *)zone{ //为防止用alloc创建对象

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{

        _instace=[super allocWithZone:zone];

    });

    return _instace;
}

+(id)shareInstace{

    if (_instace==nil) {

        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{     //dispatch_once 里的代码块只会执行一次

            _instace=[[self alloc]init];

        });
    }

    return self;

}

-(id)copyWithZone:(NSZone*)zone{ //为防止用alloc创建对象

    return _instace;

}

@end

2利用GCD方式实现单例(非ARC)

@implementation People

static id _instace;

+ (id)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instace = [super allocWithZone:zone];
    });
    return _instace;
}

+ (instancetype)sharedDataTool
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instace = [[self alloc] init];
    });
    return _instace;
}

- (id)copyWithZone:(NSZone *)zone
{
    return _instace;
}

- (oneway void)release {

}
- (id)retain {

    return self;

}
- (NSUInteger)retainCount {

    return 1;

}
- (id)autorelease {

    return self;

}

@end
时间: 2024-12-21 23:54:39

OC 单例的相关文章

oc单例

转自:http://www.2cto.com/kf/201412/362291.html 单例模式在iOS开发中可能算是最常用的模式之一了,但是由于oc本身的语言特性,想要写一个正确的单例模式相对来说比较麻烦,这里我就抛砖引玉来聊一聊iOS中单例模式的设计思路.关于单例模式更多的介绍请参考这篇文章. 单例顾名思义就是说一个类的实例只能有一个,在java.C++这类语言中,可以通过将构造函数私有化来避免对象的重复创建,但是objective-c却不能够这样做,我们需要通过其他机制来达到这个目的.一

OC单例详解

单例(singleton) 实现单例模式有三个条件: 类的构造方法是私有的 类提供一个类方法用于产生对象 类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 类的构造方法是私有的我们只需要重写allocWithZone方法,让初始化操作只执行一次 类提供一个类方法产生对象这个可以直接定义一个类方法 类中有一个私有的自己对象我们可以在.m文件中定义一个属性即可 可以保证在程序运行过程,一个类只有一个实例 应用场景 某个类经常被使用(节约系统资源) 定义工具类 共享数据 注意点 不要继

OC -- 单例设计模式

#import <Foundation/Foundation.h> @interface Person : NSObject + (instancetype)sharePerson; @end @implementation Person + (instancetype)sharePerson{ Person *p = [[Person alloc] init]; return p; } static Person *_instance; + (instancetype)allocWithZo

OC单例快速实现

首先新建一个头文件,定义如下宏: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81

OC单例概念以及样例

单例: 一个类中在整个程序只会创建一个对象,这个单例对象的数据是整个程序所有的文件所有的函数可以共享.和全局变量类似 NSFileManagerUIApplication //函数开头 defaultXXXX或者 sharedXXX 非标准单例 + (MyPlane *)defaultPlane{     static MyPlane * plane = nil;     @synchronized(self){         if (!plane) {             plane =

ios oc单例宏定义

#undef AS_SINGLETON #define AS_SINGLETON( __class ) \ - (__class *)sharedInstance; \ + (__class *)sharedInstance; #undef DEF_SINGLETON #define DEF_SINGLETON( __class ) \ - (__class *)sharedInstance \ { \ return [__class sharedInstance]; \ } \ + (__cl

OC 单例实现

2. 在.h 文件遵循 <NSCopying,NSMutabalecopying> 原文地址:https://www.cnblogs.com/qingzZ/p/9258902.html

OC &amp; Swift 单例

1. OC 单例 + (NetworkTool *)sharedNetworkTool { static id instace; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instace = [[self alloc] init]; }); return instace; } 2. Swift 单例 private static let instance = NetworkTool() class func sh

(Object-C)学习笔记 --OC的懒加载和单例方法

OC的懒加载 什么是懒加载: 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化. 懒加载的好处 (1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 (2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 懒加载的例子: #import "MusicTableViewController.h&quo