iOS 宏定义

iOS开发基础-宏定义 1.基本概念 为了编译优化和方便,以及跨平台能力,宏被大量使用。C中的宏分为两类,对象宏(object-like macro)和函数宏(function-like marco)。对象宏可以理解为查找替换,而函数宏则是接收参数,对参数进行处理后返回相应的结果,和函数类似。宏只对宏定义后的代码起作用,且与定义在哪无关,即使函数不被调用,也可以使用宏。 2.宏替换的原则 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号,如果是,它们首先被替换 替换文本随后被插入到程序 阅读详情
在项目中经常用到的一些宏定义,我基本都是将宏分成几个部分,尺寸宏、系统宏、文字宏、工具类宏、定义沙盒目录文件的宏、通知Notification相关的宏、服务端API接口的宏,还有一个管理的宏。


1、定义尺寸类的宏

#ifndef DimensMacros_h

#define DimensMacros_h


//状态栏高度

#define STATUS_BAR_HEIGHT 20

//NavBar高度

#define NAVIGATION_BAR_HEIGHT 44

//状态栏+导航栏高度

#define STATUS_AND_NAVIGATION_HEIGHT ((STATUS_BAR_HEIGHT) + (NAVIGATION_BAR_HEIGHT))

#endif /* DimensMacros_h *



2、系统宏

#ifndef SystemHeader_h

#define SystemHeader_h


// 手机型号

#define phoneModel [[UIDevice currentDevice] model]


//手机系统版本

#define phoneVersion [[UIDevice currentDevice] systemVersion]


// 当前应用软件版本  比如:1.0.1

#define appCurVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]


// 当前应用版本号码   int类型

#define appCurVersionNum [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]


// 手机唯一标示(需要修改)

#define phoneUUID [[UIDevice currentDevice].identifierForVendor UUIDString]


// 获取当前语言

#define LRCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])


//判断是否为iPhone

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

#define IS_IPHONE ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"])


//判断是否为iPad

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

#define IS_IPAD ([[[UIDevice currentDevice] model] isEqualToString:@"iPad"])


//判断是否为ipod

#define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"])


/** 设备是否为iPhone 4/4S 分辨率320x480,像素640x960,@2x */

#define iPhone4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)

/** 设备是否为iPhone 5C/5/5S 分辨率320x568,像素640x1136,@2x */

#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

/** 设备是否为iPhone 6 分辨率375x667,像素750x1334,@2x */

#define iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

/** 设备是否为iPhone 6 Plus 分辨率414x736,像素1242x2208,@3x */

#define iPhone6P ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)


//屏幕 rect

#define SCREEN_RECT ([UIScreen mainScreen].bounds)

#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)

#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)

#define CONTENT_HEIGHT (SCREEN_HEIGHT - NAVIGATION_BAR_HEIGHT - STATUS_BAR_HEIGHT)


//屏幕分辨率

#define SCREEN_RESOLUTION (SCREEN_WIDTH * SCREEN_HEIGHT * ([UIScreen mainScreen].scale))


//大于等于7.0的ios版本

#define IOS_VERSION_7_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

//判断 iOS 8 或更高的系统版本

#define IOS_VERSION_8_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0)? (YES):(NO))

//iOS6时,导航VC中view的起始高度

#define YH_HEIGHT (iOS7_OR_LATER ? 64:0)


//获取系统时间戳

#define getCurentTime [NSString stringWithFormat:@"%ld", (long)[[NSDate date] timeIntervalSince1970]]


// 检查系统版本

#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)

#define SYSTEM_VERSION_GREATER_THAN(v)              ([[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

#define SYSTEM_VERSION_LESS_THAN(v)                ([[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)    ([[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)



#endif /* SystemHeader_h */



3、工具类的宏 

#ifndef UtilsHeader_h

#define UtilsHeader_h


/*

 * log输出

 * 项目开发中,我们会在许多地方加上Log,但是发布的时候又不想用这些Log,我们也不可能一个一个的删除,所以自定义Log是必然的!

 */

#ifdef DEBUG

#define LOG(...) NSLog(__VA_ARGS__)

#else

#define LOG(...)

#endif


// 判断是不是iOS系统,如果是iOS系统在真机和模拟器输出都是YES

#if TARGET_OS_IPHONE

#endif

#if (TARGET_IPHONE_SIMULATOR)

// 在模拟器的情况下

#else

// 在真机情况下

#endif



// 获取RGB颜色

#define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a]

#define RGB(r,g,b) RGBA(r,g,b,1.0f)

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

// 设置随机颜色

#define LRRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]

// clear背景颜色

#define LRClearColor [UIColor clearColor]



// 判断是字符串否为空

 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] || str == nil || [str length] < 1 ? YES : NO )

// 判断数组是否为空

#define kArrayIsEmpty(array) (array == nil || [array isKindOfClass:[NSNull class]] || array.count == 0)

// 判断字典是否为空

 #define kDictIsEmpty(dic) (dic == nil || [dic isKindOfClass:[NSNull class]] || dic.allKeys == 0)

// 判断是否为空对象

#define kObjectIsEmpty(_object) (_object == nil \

|| [_object isKindOfClass:[NSNull class]] \

|| ([_object respondsToSelector:@selector(length)] && [(NSData *)_object length] == 0) \

|| ([_object respondsToSelector:@selector(count)] && [(NSArray *)_object count] == 0))


// 角度转弧度/弧度转角度

#define M_PI        3.14159265358979323846264338327950288  

#define LRDegreesToRadian(x) (M_PI * (x) / 180.0)

#define LRRadianToDegrees(radian) (radian*180.0)/(M_PI)


// 弱引用/强引用

#define LRWeakSelf(type)  __weak typeof(type) weak##type = type;

#define LRStrongSelf(type)  __strong typeof(type) type = weak##type;



// 读取本地图片

#define LOADIMAGE(file,ext) [UIImage imageWithContentsOfFile:[NSBundle mainBundle]pathForResource:file ofType:ext]

// 定义UIImage对象

#define IMAGE(A) [UIImage imageWithContentsOfFile:[NSBundle mainBundle] pathForResource:A ofType:nil]

// 定义UIImage对象(性能没有上边两种高)

#define ImageNamed(_pointer) [UIImage imageNamed:[UIUtil imageName:_pointer]



// GCD

#define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)

#define MAIN(block) dispatch_async(dispatch_get_main_queue(),block)



#endif /* UtilsHeader_h */


4、定义沙盒目录文件的宏

#ifndef PathHeader_h

#define PathHeader_h


//文件的目录

// 获取沙盒Document路径

#define kDocumentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]

// 获取沙盒temp路径

#define kTempPath NSTemporaryDirectory()

// 获取沙盒Cache路径

#define kCachePath [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]

// 获取自定义plist路径

#define kDataPath                 [kPathDocument stringByAppendingPathComponent:@"data.plist"]


#endif /* PathHeader_h */


5、通知Notification相关的宏

#ifndef NotificationHeader_h

#define NotificationHeader_h


// 获取通知中心

#define LRNotificationCenter [NSNotificationCenter defaultCenter]


#define TNCancelFavoriteProductNotification     @"TNCancelFavoriteProductNotification"     //取消收藏时

#define TNMarkFavoriteProductNotification       @"TNMarkFavoriteProductNotification"       //标记收藏时


#define kNotficationDownloadProgressChanged     @"kNotficationDownloadProgressChanged"     //下载进度变化

#define kNotificationPauseDownload              @"kNotificationPauseDownload"              //暂停下载

#define kNotificationStartDownload              @"kNotificationStartDownload"              //开始下载


#define kNotificationDownloadSuccess            @"kNotificationDownloadSuccess"            //下载成功

#define kNotificationDownloadFailed             @"kNotificationDownloadFailed"             //下载失败

#define kNotificationDownloadNewMagazine        @"kNotificationDownloadNewMagazine"



#endif /* NotificationHeader_h */



 6、服务端API接口的宏

#ifndef APIStringHeader_h

#define APIStringHeader_h


#ifdef DEBUG

//Debug状态下的测试API

#define API_BASE_URL_STRING     @""


#else

//Release状态下的线上API

#define API_BASE_URL_STRING     @""


#endif


//接口

#define UPLOAD_FILE             @"/upload/file"            //上传图片

#define LOGIN                   @"/login"                  //登录

#define LOGINOUT                @"/logout"                 //登出


#endif /* APIStringHeader_h */



 7、描述文字的宏

#ifndef TextHeader_h

#define TextHeader_h


#define LoadingData @"正在加载中..."

#define LoadinSuccess @"登录成功"

#define LoadoutSuccess @"退出成功"


#endif /* TextHeader_h */



8、创建一个import所有宏相关的文件Macros.h

#ifndef Header_h

#define Header_h


#import "UIView+Extension.h"

#import "NSString+Extension.h"

#import "UIImage+ResizeImage.h"


#import "PathHeader.h"

#import "UtilsHeader.h"

#import "DimensMacros.h"

#import "TextHeader.h"

#import "APIStringHeader.h"

#import "SystemHeader.h"


#endif


最后在xcode项目的pch文件中,导入Macros.h文件

#ifdef __OBJC__

#import <UIKit/UIKit.h>

#import <Foundation/Foundation.h>

#import "SVProHUD.h"

#import "EaseUI.h"

#import <Hyphenate/Hyphenate.h>


#import "Header.h"

#endif


以上是我在项目中用到的宏,如果有我没提到大家还认为不错的宏可以给我留言说下 大家共同学习。

Qt 调用YOLO模型(代码) 本文介绍了如何在 Qt C++ 环境中集成 YOLO 模型进行目标检测,包括模型封装、界面设计和实时处理等关键步骤。通过这种方法,你可以快速开发出具有目标检测功能的 Qt 应用程序,应用于监控系统、机器人视觉、图像分析等多个领域。 阅读详情

相关推荐

整理笔记——二极管

二极管是一种由半导体材料制成的一种具有单向导电性能的电子元器件,二极管的核心是PN结。加在二极管两端的电压和通关的电流被成为,二极管的伏安特性曲线​​​二极管的正向特性:起初正向电压较小时,正向电流几乎没有,称之为死区,此时二极管处于截止状态。当电压差超过截止电压(0.5V或者0.7V),电流随着电压上升,开始增加缓慢,随后急剧增大,二极管的电阻变小进入导通状态,此时电压变化较小。二极管的反向特性:起初反向电流很小,不随电压二变化,此时成为反向饱和电流;当方向电压达到二极管的反向击穿电压。

#include 811

iOS常用宏定义汇总

1.获取屏幕宽度与高度 #define SLScreenHeight [UIScreen mainScreen].bounds.size.width #define SLScreenWidth [UIScreen mainScreen].bounds.size.height 2.根据rgb获得颜色 #define SLColor(r,g,b) [UIColor colorWithRed:(...

小天空的博客 1290

DDR核心机制解析:从Burst到Prefetch的性能跃迁

本文深入解析了DDR内存性能跃迁的核心机制,重点阐述了Burst(突发传输)与Prefetch(预取)技术的协同工作原理。Burst机制通过连续传输数据减少访问延迟,而Prefetch则通过内部预取数据提升吞吐量,两者结合完美匹配现代CPU缓存行需求,是DDR3等内存实现高效带宽的关键。

weixin_29232121的博客 135

常用宏 定义

字符串是否为空 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] || str == nil || [str length] 数组是否为空 #define kArrayIsEmpty(array) (array == nil || [array isKindOfClass:[NSNull

st646889325的博客 866

配置xen上VM混杂模式,使其能捕获物理网络流量

本文目的:配置VM和xen相应的物理网卡(pif)和虚拟网卡(vi

LeoDuo的专栏 3721

【ShaderToy】开篇

写在前面呜呼,好久没有写博客了,好惭愧。题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎。开学还是爬上来老实更新博客学习吧~今天爬上来一看,发现优快云的博客编辑终于更新了!进步总是好的,以前的编辑器实在很捉急。使用这种标记语言的确方便了很多,但好像颜色字体没法设置?程序员果然对美观没什么追求。ShaderToy如果你还没听过Sha

candycat 8万+

iOS常用宏定义总结

//字符串拼接 #define kFormatStr(...) [NSString stringWithFormat:__VA_ARGS__] //颜色RGBhttps://mp.youkuaiyun.com/ #define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1] //弱引用 #define WKWeakSelf __weak typeof(self) weak...

q776530433的博客 447

基于AI大模型实现自然语言转SQL、SQL解释、SQL优化和SQL转换

随着大数据和人工智能技术的发展,数据分析和数据挖掘在各行各业中的应用越来越广泛。SQL(Structured Query Language)作为关系数据库的查询语言,是数据分析的重要工具。然而,SQL语言的复杂性和专业性使得许多非技术背景的用户难以直接使用,阻碍了数据的广泛利用。为了降低SQL的使用门槛,许多研究者和企业开始探索如何通过自然语言处理(NLP)技术,将自然语言转化为SQL查询语句,从而让用户可以通过自然语言与数据库进行交互。

AI天才研究院 2239

玩转iOS“宏定义”

宏定义在C类语言中非常重要,因为宏是一种预编译时的功能,因此其可以比运行时更高层面的对程序流程进行控制。在初学宏定义的时候,大家可能都会有这样一种感觉:就是完全替换么,太简单了。但如果你真这么想,那你就太天真了,不说自己编写宏,在Foundation框架中内置定义的许多宏要看明白也要费一番脑筋。本篇博客,总结了前辈的经验,同时收集了一些编写非常巧妙的宏进行分析,希望可以帮助大家对宏定义有更加深刻的...

a1661408343的博客 1051

三相五柱式消弧线圈自动测控装置设计与实现

本文设计了一种基于STM32的三相五柱式消弧线圈自动测控装置。该装置采用信号注入法检测系统对地电容电流,通过PID自适应算法调节消弧线圈电感值,实现单相接地故障时的快速补偿。硬件系统包含信号采集、注入、控制执行等模块,软件采用Goertzel算法提取特征频率信号,结合增量式PID实现精确控制。实验结果表明,装置电容检测误差小于2%,调谐响应时间小于50ms,满足配电网对消弧线圈自动调谐的技术要求。

AI的内部世界的博客 239

PostgreSQL核心原理:数据库崩溃恢复的唯一真相详解

PostgreSQL崩溃恢复机制通过WAL日志确保数据一致性和持久性。核心流程包括:触发恢复(非正常关闭时)、读取控制文件获取检查点LSN、顺序扫描WAL日志进行Redo阶段重做已提交事务、利用MVCC标记未提交事务为ABORTED实现逻辑撤销,最后执行检查点完成恢复。该机制依赖WAL原子性、检查点锚点和无Undo的可见性模型三大支柱,保证即使系统崩溃也能恢复到逻辑一致状态。关键设计包括延迟写入、LSN顺序控制和FPW防部分写,最终通过确定性重放实现ACID特性。

数据知道的博客 2664

iOS常用的高效开发宏

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34331102的博客 154

华为OD机试 - 商品推荐多属性排序 - 数组(Python/JS/C/C++ 双机位A卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。双十一来临,小王准备买某个购物平台买坚果。在输入坚果时,页面默认按照综合推荐列表。小王想知道这个综合排序时如何完成的,于是便开始思考算法题。经过一番操作后,完成它的多个关键词排序算法。希望你给小王提供一份正确的排序结果,验证其实现算法结果的准确性

学Java,找哪吒 622

IOS 宏定义

看喵神的宏定义的黑魔法学到了很多,在这里总结下。 一、单个“#”的使用 单个“#”表示将后面紧接的参数变成 C 字符串,如 : #define Name(pro) @#pro - (void)testName {    NSLog(@"|%@|",Name(self.dataArray));}2015-10-20 11:34:45.691 Shadow[1878:71990

一只叫花花的猪的专栏 1104

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

iOS几种宏定义

不带参数 //获取底部安全区域高度(主要针对iPhoneX等设备) //safeAreaInsets 该方法iOS 11之后新加入的接口 #define BottomSaveHeight [[[UIApplication sharedApplication] delegate] window].safeAreaInsets.bottom 带参数 // 弱引用自身 block中调用自身需要...

u011248221的博客 631

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS常用宏定义大全

iOS常用宏定义大全OC版宏定义与常量的区别宏:只是在预处理器里进行文本替换,不做任何类型检查,宏能定义代码,const不能,多个宏编译时间相对较长,影响开发效率,调试过慢,const只会编译一次,缩短编译时间。 所以在使用的时候,最好把代码和一些基本数据类型如int抽成宏。 而对于常量字符串使用const,苹果也是这样使用的。下面总结一下一些常用的宏定义。1.获取屏幕宽度与高度#define

Bruce_pac的博客 2937

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[iOS]一些宏定义

#ifndef PrefixHeader_pch #define PrefixHeader_pch // 屏幕的宽 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width // 屏幕的高 #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height // AppDe...

Gamin 547

iOS宏定义

1.宏定义需要加括号的两种情况: (1)如果宏的替换列表中带有运算符,那么使用要将替换列表放到括号中。例如#define MAX_VALUE(X,Y) ((X) &gt; (Y) ? (X) : (Y)) (2)如果宏有参数,每次参数在替换列表中出现时都要放在括号中。同上 #define MAX_VALUE(X,Y) ((X) &gt; (Y) ? (X) : (Y))// 求两个...

九天揽月 1652

IOS常用的宏定义

作为一名iOS开发者,灵活运用宏定义方法是必不可少的啦!#pragma mark —---Color set----#define RGBA(R/*红*/, G/*绿*/, B/*蓝*/, A/*透明*/) \[UIColor colorWithRed:R/255.f green:G/255.f blue:B/255.f alpha:A]/** 屏幕宽*/#define kScreenWidth ...

YuanZcc的博客 252

iOS 常用的宏定义

屏幕尺寸 #definekScreenWidth[UIScreen mainScreen].bounds.size.width #definekScreenHeight[UIScreen mainScreen].bounds.size.height 手机型号 #define kISiPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfa...

qq_30356665的博客 369

iOS开发常用宏定义

//获取屏幕 宽度、高度 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height) // 根据版本号导入文件#ifdef NSFoundationVers...

ZHANGBO9477的博客 173

IOS开发中常用的宏定义

有些时候,我们需要将代码简洁化,这样便于读代码。我们可以将一些不变的东东抽取出来,将变化的东西作为参数。定义为宏,这样在写的时候就简单多了。 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操作系统是不是ios7 #define IOS7 ( [[[UIDevice currentDevice].systemVersion doubleValue] >= 7.0] )

移动开发的专栏 1411

iOS中常用的宏定义总结

这篇文章主要给大家介绍了关于iOS中常用的宏定义的相关资料,例如UI元素、Log、系统、颜色类等等的示例代码,文中介绍地方非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧 前言 宏定义在C系开发中可以说占有举足轻重的作用,为了简化开发流程,提升工作效率,收集了一些平时常用的宏定义,今后会不定期更新 1.UI元素 //NavBar高度 #define NAVIGATIONBAR_HEI...

D_猿员的博客 469

iOS 多快好省的宏定义

#iOS 多快好省的宏 <!-- lang: cpp --> // 字符串: #ifndef nilToEmpty #define nilToEmpty(object) (object!=nil)?object:@"" #endif #ifndef formatStringOfO...

cheshu134615564的博客 132

iOS 使用宏定义函数和代码块

iOS使用宏定义函数和代码块 今天在开发过程中碰到一个问题:就是父类中要向外发送通知,然后子类中或者其他类中来接收它。当然一般是把它写到类方法中去,但是有个问题,就是如果调用的类不是它的子类,就不能直接调用,当然也可以采用静态方法实现,我这里主要是想用宏定义来实现,下面我分别介绍使用宏定义函数和定义代码块的方式进行,废话不多说了,直接上代码: 使用宏定义函数实现 //定义 #defi

Wihatow's Blog 8862
上一篇: iOS OC消除黄色警告⚠️ (不断的更新中...)
下一篇: iOS 图片的压缩
xinxu-dev
博客等级 码龄12年 16粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值