李洪强iOS开发之宏定义方法来初始化一个单例对象

news/2023/6/8 20:49:49

单例的使用:

.m

 

为了方便实用,只要将以下代码定义在header文件或者.pch文件即可;

 

// .h

#define singleton_interface(class) + (instancetype)shared##class;

 

// .m

#define singleton_implementation(class) \

static class *_instance; \

\

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

{ \

    static dispatch_once_t onceToken; \

    dispatch_once(&onceToken, ^{ \

        _instance = [super allocWithZone:zone]; \

    }); \

\

    return _instance; \

} \

\

+ (instancetype)shared##class \

{ \

    if (_instance == nil) { \

        _instance = [[class alloc] init]; \

    } \

\

    return _instance; \

}

 

使用方法:

 

Manager.h文件

#import <Foundation/Foundation.h>

 

@interface Manager :NSObject

 

singleton_interface(Manager);

 

@end

 

Manager.m文件

 

#import "Manager.h"

 

@interface Manager ()

 

@end

 

@implementation Manager

 

singleton_implementation(Manager)

 

@end

 

viewController调用

 

Manager *manager = [Manager sharedManager];

 

转载于:https://www.cnblogs.com/LiLihongqiang/p/5673465.html


https://dhexx.cn/news/show-43320.html

相关文章

Flet教程之 19 VerticalDivider 分隔符组件 基础入门(教程含源码)

Flet是什么 Flet 是一个框架,使您能够轻松地以您喜欢的语言构建实时 Web、移动和桌面应用程序,并与您的团队安全地共享它们。无需前端经验。 什么是VerticalDivider 一条细的垂直线,两边都有填充。在材料设计语言中,这代表了一个分隔符。 实战代码 import flet from fl…

优秀工程师-UICollectionView

前言 这几天有时间看了下UICollectionView的东西&#xff0c;才发觉它真的非常强大&#xff0c;很有必要好好学习学习。以前虽然用过几次&#xff0c;但没有系统的整理总结过。这两天我为UICollectionView做一个比较全面的整理。包括基本使用&#xff0c;自定义布局&#xff0c…

SwiftUI Swift 内功之如何在 Swift 中进行自动三角函数计算

没有人喜欢数学,这是事实。那么我们能做些什么来完全消除它从我们的生活中呢?不,这不是机器人。也许有一天我也会写这些。谁知道!但就目前而言,您将不得不解决函数和公式。 准备好离开过去的计算器了吗?让我们看看如何为我们的项目简化三角函数。 原则 对于那些对三角…

李洪强iOS开发之【零基础学习iOS开发】【02-C语言】08-基本运算

计算机的基本能力就是计算&#xff0c;所以一门程序设计语言的计算能力是非常重要的。C语言之所以无所不能&#xff0c;是因为它不仅有丰富的数据类型&#xff0c;还有强大的计算能力。C语言一共有34种运算符&#xff0c;包括了常见的加减乘除运算。这讲就对C语言中的运算符做一…

优秀工程师-UIResponder

在iOS中UIResponder类是专门用来响应用户的操作处理各种事件的&#xff0c;包括触摸事件(Touch Events)、运动事件(Motion Events)、远程控制事件(Remote Control Events,如插入耳机调节音量触发的事件)。我们知道UIApplication、UIView、UIViewController这几个类是直接继承自…

李洪强iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)

iOS开发拓展篇—UIDynamic(重力行为碰撞检测) 一、重力行为 说明&#xff1a;给定重力方向、加速度&#xff0c;让物体朝着重力方向掉落 1.方法 &#xff08;1&#xff09;UIGravityBehavior的初始化 - (instancetype)initWithItems:(NSArray *)items; item参数 &#xff1a;里…

SwiftUI 教程之如何在 2 秒内实现自动滚动功能

使用 SwiftUI 进行开发令人惊讶。它确实使得只需几行代码就可以实现一些很酷的功能。今天,我们来实现自动滚动。当您创建聊天应用程序时,此技术特别有用。我将尽可能简要地解释它。 准备你的 UI struct AutoScrollList: View {var body: some View {VStack {Button("S…

【零基础学习iOS开发】【02-C语言】09-流程控制

前言 1.默认的运行流程 默认情况下&#xff0c;程序的运行流程是这样的&#xff1a;运行程序后&#xff0c;系统会按书写顺序执行程序中的每一行代码。比如下面的程序 1 #include <stdio.h>2 3 int main()4 {5 6 printf("Hello-1\n");7 printf(&qu…

SwiftUI 4 新功能之掌握 WeatherKit 和 Swift Charts

SwiftUI 4 新功能之掌握 WeatherKit 和 Swift Charts 今年在 WWDC22 上有很多令人兴奋的新框架和 API 让我们投入其中。然而,我对 WeatherKit 和 Swift Charts 感到非常兴奋,因为我们现在终于有了对天气数据和绘制数据集的原生 1 方支持。 在本文中,我们将研究如何将两者结…

iOS开发拓展篇—UIDynamic(捕捉行为)

iOS开发拓展篇—UIDynamic(捕捉行为) 一、简介 可以让物体迅速冲到某个位置&#xff08;捕捉位置&#xff09;&#xff0c;捕捉到位置之后会带有一定的震动 UISnapBehavior的初始化 - (instancetype)initWithItem:(id <UIDynamicItem>)item snapToPoint:(CGPoint)point; …