iOS-----写一个规范的单例--->

1.集成了一个宏

2.两句代码集成单例

3.一句代码调用单例

------------->

1.集成了一个宏

//这里就要注意了,因为每个单例中,方法名可以不一样,那么我们就不能把名字写死,要灵活自定义,那么就要调用的时候给他传名啊,那么!!!要注意连接符号##的使用,传进来的参数要放到连接符号后面如下

#define iVanSingletonH(name)  +(instancetype)shared##name;

//注意这里,一般宏只会判断 宏的名字后面跟着那段是它的代码,所以要加\符号告诉他,下一行也是他管理的代码

#pragma 注意这里类型要写成id类型,因为它接收的单例是不同类型的

#define iVanSingletonM(name) \

static id _##name;\

\

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

{\

static dispatch_once_t onceToken;\

dispatch_once(&onceToken, ^{\

_##name = [super allocWithZone:zone];\

});\

return _##name;\

}\

+(instancetype)shared##name\

{\

static dispatch_once_t onceToken;\

dispatch_once(&onceToken, ^{\

_##name = [[self alloc]init];\

});\

return _##name;\

}\

-(id)copyWithZone:(NSZone *)zone\

{\

return _##name;\

}

2.两句代码集成单例

想写单例的编码区的.h文件 写一句代码:

iVanSingletonH(name)  ,name写实际上你想调用的单例的方法名

在相应的.m文件 写一句代码:

iVanSingletonM(name),name写实际上你想调用的单例的方法名(和上面.h文件的name一致)

3.一句代码调用单例

在想要调用单例的地方,导入单例的头文件 :

#import “ClassName.h”

调用代码:

[ClassName shareName];

时间: 2024-10-10 15:57:11

iOS-----写一个规范的单例--->的相关文章

【iOS】ARC-MRC下的单例及其应用

单例的应用十分普遍,单例模式使一个类只有一个实例. *易于供外界访问. *方便控制实例个数,节约系统资源. *OC中的常见单例: 如:UIApplication,  NSNotificationCenter,  NSUserDefaults, NSFIleManager. *应用程序中用到的单例: 如:背景音乐,音效管理等. 一.ARC中实现单例 创建单例的步骤: *1.定义一个全局的静态变量_instance,用来记录“第一次”被实例化出来的对象. *2.重写allocWithZone方法,此

IOS写一个可以支持全屏的WebView

这样来写布局 一个TitleView作为顶部搜索栏: @implementation TitleView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code [self initTilte]; } return self; } -(void)initTilte{ UITextField* field = [[UITextField al

iOS——Swift开发中的单例设计模式(摘译,非原创)

最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子.可能是xcode或者sdk的问题吧(我相信他们不会把未经测试的代码展示,吧?...),一些帖子中的代码犯了明显的错误,编译失败.于是有了这篇文章,分享给大家. 原作者实现了一种单例,但是红色代码导致非线程安全: 1 class var sharedInstance:TPScopeManager {

iOS 页面间传值 之 单例传值 , block 传值

ios 页面间传值有许多,前边已经分享过属性传值和代理传值,今天主要说一下单例传值和 block 传值 单例传值:单例模式一种常用的开发的模式,单例因为在整个程序中无论在何时初始化对象,获取到的都是同一个对象,对象的属性相同,所以可以用来传值. block 传值 与 代理传值相似,主要用于第二个页面向第一个页面传值,block 传值具体步骤: 在第二个页面: 1.声明: block typedef void(^SendMessagerBlock) (NSString *str); 2.创建方法:

iOS开发中常用的单例

定义:一个类的对象,无论在何时创建.无论创建多少次,创建出来的对象都是同一个对象. 使用场景:当有一些数据需要共享给别的类的时候,就可以把这些数据保存在单例对象中. 关键代码: + (instancetype)allocWithZone:(struct_NSZone *)zone {     static id instance = nil;     if(instance == nil)     {       instance =   [super allocWithZone:zone];

一个小的单例类。再也不用担心继承类问题。

using UnityEngine;using System.Collections; public class TSingleton<T> where T: new () { private static T Singleton; public static T GetInstance() { if(Singleton == null){ Singleton = new T(); } return Singleton; }}

关于java写一个单例类(面试手写题)

package com.shundong.javacore; /** * java写一个简单的单例类 * @author shundong * */ class Singleton { //使用一个类变量来缓存曾经创建的实例 private static Singleton instance; //对构造进行隐藏(private) private Singleton(){} /** * 提供一个静态方法 * 该方法加入了自定义控制 保证只产生一个Singleton对象 * @return 返回S

【Swfit】Swift与OC两种语法写单例的区别

Swift与OC两种语法写单例的区别 例如写一个NetworkTools的单例 (1)OC写单例 1 + (instancetype)sharedNetworkTools { 2 static id instance; 3 4 static dispatch_once_t onceToken; 5 6 dispatch_once(&onceToken, ^{ 7 instance = [[self alloc] init]; 8 //这里可以做一些初始化 9 }); 10 11 return i

简单多线程和单例学习例一

这是一个简单的面试题: 写一个简单的单例和多线程结合的例子; 代码: 单例代码: public class Singleton { private int i = 0; //在类内部实例化单例, 将会在虚拟机启动加载类的时候加载该静态实例 private static Singleton singleton = new Singleton(); //自由化构造函数,以确保不会被外部类实例化 private Singleton() { System.out.println("初始化单例!"