iOS Object-C 创建类别(Category) 与使用

有时候使用系统给出类或者第三方的类,但是呢它们自带的属性和方法又太少,不够我们的业务使用,这时候就需要给"系统的类或者第三方类"创建一个类别(Category),把自己的想添加的属性和方法写进来.

Category模式用于向已经存在的类添加方法从而达到扩展已有类的目的

一:创建Category:

1.1. 目录右键 New File --> ios --> Objective-C File (如下图:)

1.2.填写信息

在File 写上类别的名字(理论上是随便起的,但是要做到望名知意,这里我给UIButton创建了一个类别,目的就是为了快速设置UIButton的X,Y,Width,Height 等数据,所以名字叫做GetFrame)

在File Type一栏选择 Categoru

在Class一栏选择你要给什么类创建类别(不仅可以给系统的UIButton,UIView等,还可以给第三方的或者自己创建的类创建类别.例如:可以给自己写的登陆类LoginViewController 创建分类)

1.3完成以上的步骤,就算是给一个已知的类创建了一个类别了.

如果你的Xcode是15.0以上,有可能创建不成功,因为Xcode15缺失了"CategoryNSObject"和"ExtensionNSObject"两个文件夹,解决方法看我上一篇文章:https://mp.csdn.net/mp_blog/creation/editor/141098276

二:使用Category

很多文章都说Category只可以添加方法,不可以添加属性,但是这种说法不完全正确,

事实上 **,**通过 Category 可以添加 实例方法、类方法、属性;

事实上 **,**通过 Category 可以添加 实例方法、类方法、属性;

事实上 **,**通过 Category 可以添加 实例方法、类方法、属性;

但是如果添加了属性,需要开发者自己实现 setter、 getter方法,不然系统会Crash,

PS:网上有很多文章说,Category新增属性的话,需要引入#import<objc/runtime.h> ,但是我不引入也没报错, 不知道是Xcode优化了(Xcode15.2),还是说本来就不需要

2.1.例如:UIButton+GetFrame.h 这个类别添加了 一个 - (void)eat方法, 和 X,Y ,name属性

2.2.在UIButton+GetFrame.m 里实现eat方法 和 X,Y的 set、get、name方法

NSString的name这里需要用到 objc_setAssociatedObject 、objc_getAssociatedObject 这两个方法

2.3.在ViewController里使用.(注意:需要倒入#import "UIButton+GetFrame.h")

特别鸣谢:本文章借鉴了这位作者的思路,感兴趣的朋友可以前往查看 :https://www.jianshu.com/p/582cc3174581

相关推荐
福兮说11 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
茶底世界之下18 小时前
时间线效果层,为什么不能只复用一个处理器?
ios·swift
ZZH_AI项目交付18 小时前
实时字幕负责快,本地录音负责不丢:一个 iOS 录音功能为什么需要两条链路
ios·ai编程
Cc.Y19 小时前
Swift深度链接的极简之道
ios·cocoa·swift
AI砖家20 小时前
iPhone Duo 上架新规:旧 App 怎么兼容,还能不能继续更新?
ios·cocoa·iphone·ios上架·ios上架新规
黑科技iOS上架20 小时前
小蟹iOS混淆:Objective-C项目实战
ios·审核·ios混淆·执行程序差异化
茶底世界之下21 小时前
照片边缘太抢眼?用 Awaking 做一次 1:1 裁切
ios
Digitally21 小时前
如何在iPhone上永久删除文件而无需恢复
ios·iphone
黑科技iOS上架1 天前
iOS二进制混淆实战:工程级指纹防护彻底解决4.3同质化拒审
ios·审核·ios混淆·执行程序差异化
CocoaKier1 天前
苹果商店详情顶部头图已面向所有开发者开放!
ios·apple