iOS ARC 下的单例模式

#import <Foundation/Foundation.h>

@interface RYSingleExample : NSObject<NSCopying>

+(instancetype)singleExample;

@end

#import "RYSingleExample.h"

static id _single;

@implementation RYSingleExample

+(instancetype)singleExample

{

if(_single==nil)

{

@synchronized(self)

{

if (_single==nil) {

_single=[[self alloc]init];

}

}

}

return _single;

}

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

{

if(_single==nil)

{

@synchronized(self)

{

if (_single==nil) {

_single=[super allocWithZone:zone];

}

}

}

return _single;

}

-(id)copyWithZone:(NSZone *)zone

{

return _single;

}

@end

时间: 2024-10-03 15:01:45

iOS ARC 下的单例模式的相关文章

iOS ARC下dealloc过程及.cxx_destruct的探究

前言 这次探索源自于自己一直以来对ARC的一个疑问,在MRC时代,经常写下面的代码: 1 2 3 4 5 6 7 8 9 - (void)dealloc {     self.array = nil;     self.string = nil;     // ... //     // 非Objc对象内存的释放,如CFRelease(...)     // ... //     [super dealloc]; } 对象析构时将内部其他对象release掉,申请的非Objc对象的内存当然也一并

iOS开发多线程篇—单例模式(ARC) - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3808641.html iOS开发多线程篇—单例模式(ARC) 一.简单说明: 设计模式:多年软件开发,总结出来的一套经验.方法和工具 java中有23种设计模式,在ios中最常用的是单例模式和代理模式. 二.单例模式说明 (1)单例模式的作用 :可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. (2)单例模式的使用场合:在整个应用程序中,共享一份资

iOS开发多线程篇—单例模式(ARC)

iOS开发多线程篇—单例模式(ARC) - 文顶顶 原文  http://www.cnblogs.com/wendingding/p/3808641.html iOS开发多线程篇—单例模式(ARC) 一.简单说明: 设计模式:多年软件开发,总结出来的一套经验.方法和工具 java中有23种设计模式,在ios中最常用的是单例模式和代理模式. 二.单例模式说明 (1)单例模式的作用 :可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. (

iOS: ARC &amp; MRC下string内存管理策略探究

ARC & MRC下string内存管理策略探究 前两天跟同事争论一个关于NSString执行copy操作以后是否会发生变化,两个人整了半天,最后写代码验证了一下,发现原来NSString操作没我们想的那么简单,下面就让我们一起看看NSString和NSMutableString在MRC下执行retain,copy,mutableCopy,以及ARC下不同的修饰__weak, __strong修饰赋值究竟发生了什么. 一.验证代码如下: - (void)testStringAddress { i

iOS: ARC和非ARC下使用Block属性的问题

1. Block的声明和线程安全 Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC下返回Block). 另一个需要注意的问题是关于线程安全,在声明Block属性时需要确认“在调用Block时另一个线程有没有可能去修改Block?”这个问题,如果确定不会有这种情况发生的话,那么Block属性声明可以用nonatomic.如果不肯定的话(通常情况是这样的),那么你首先需要声明Blo

ARC和Non-ARC下的单例模式

原文:http://www.cocoachina.com/industry/20130510/6168.html http://www.justinyan.me/post/1306 单例模式iOS SDK中也有许多类使用了单例模式,例如,UIApplication:当程序启动的时候,会调用UIApplicationMain方法,在该方法中,会实例化一个UIApplication对象,之后在程序中的任意地方调用sharedApplication方法都将返回一个与当前应用程序相关的UIApplica

[转]iOS中ARC下Block的循环引用

[ARC的特性] ARC下,所有NSObject类型指针, 1. 默认为__strong类型 2. 可以显示的指定为__weak类型,__weak类型指针在所指向对象销毁后会自动置为nil 3. __autorelesing类型用于inout参数类型 ARC下,当一个函数返回一个NSObject指针时,编译器会帮我们实现autorelease调用.例如: return pObject; 编译器会帮我们扩展为 return [pObject autorelease]; ARC下,不能显式relea

iOS开发高级面试题-ARC下dealloc的作用

在MRC时代,我们需要在 dealloc中做很多,比如释放对象,等等; 如今我们已经进入ARC时代,对于普通对象的释放,系统已经帮我们做好了; 那是否可以高枕无忧了呢?在ARC下我们应该做什么? 观点: ARC下,系统可以帮我们释放该对象,及其包含的对象; 但是却无法释放不属于该对象的一些东西,如: 1.通知的观察者 由于通知中心是系统的一个单例,你在注册通知的观察者时,实际上是在通知中心注册的, 这时,即使ARC下系统帮我们释放了对象,但是在通知中心的观察还是没有移除,那么当有 该通知时,依然

iOS——在ARC下引入MRC文件

在写一些工程时我们总是要引入一些第三方文件,但是这些文件有些是MRC下的有些是ARC下的.所以我们要进行转换. 引入三方文件时首先要阅读引入的文件的.h 文件头部信息 如下面的文件:头部文件要求:Header Search Paths包含/usr/include/libxml2 Other Linker Flags包含-lxml2 所以 在Bulid Setting下进行搜索 搜索后对其进行修改 对.h文件所要求的路径进行一一添加,添加完成后,就是把让MRC得文件在ARC的工程下进行运行 首先在