Category 和 Extension 的区别

category

swift 复制代码
@interface ClassName (CategoryName)
 
@end

extension 又被称为匿名分类(anonymous category)

swift 复制代码
@interface ClassName ()
 
@end

可以在 extension 的{}中添加自定义的实例变量

swift 复制代码
@interface XYZPerson () {
    id _someCustomInstanceVariable;
}
...
@end

主要区别

  • Category是运行时 决定生效的,Extension是编译时就决定生效的
  • Category可以为系统类添加分类,Extension不能。
  • Category是有声明和实现,Extension直接写在宿主.m文件,只有声明。
  • Category只能扩充方法,不能扩充成员变量和属性。
  • 如果Category声明了一个属性,那么Category只会生成这个属性的set,get方法的声明,也就不是会实现 get set 方法。属性的实例变量无法被存储,除非是原有类的实例变量。
  • 如果我们在 extension 中添加了方法, 那么这些方法必须在类的实现中实现。

参考:https://juejin.cn/post/6960972413240606734

swift 不能在 extension 中添加存储属性,但可以通过 AssociatedKey 的方式来间接实现。

swift 复制代码
public extension UIView {
    private struct AssociatedKey {
        static var identifier: String = "identifier"
    }
    
    public var identifier: String {
        get {
            return objc_getAssociatedObject(self, &AssociatedKey.identifier) as? String ?? ""
        }
        
        set {
            objc_setAssociatedObject(self, &AssociatedKey.identifier, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)
        }
    }
}

参考:https://juejin.cn/post/6856416734577410055

swift 的 extension 相当于影分身,每个分身可以具有不同技能(遵循了某个协议或数据源或新定义一下方法)

swift 的 category 写法:extension name on SomeClass

swift 复制代码
extension SomeName on DateTime {
  
}
相关推荐
2501_916008895 小时前
没有源码如何加密 IPA 实战流程与多工具组合落地指南
android·ios·小程序·https·uni-app·iphone·webview
CocoaKier7 小时前
微信与苹果就小程序支付达成和解,iOS用户有望在小程序内直接使用苹果支付
ios·apple
QuantumLeap丶9 小时前
《uni-app跨平台开发完全指南》- 07 - 数据绑定与事件处理
vue.js·ios·uni-app
ajassi200010 小时前
开源 Objective-C IOS 应用开发(五)iOS操作(action)和输出口(Outlet)
ios·开源·objective-c
2501_9159090613 小时前
Flutter 应用怎么加固,多工具组合的工程化实战(Flutter 加固/Dart 混淆/IPA 成品加固/Ipa Guard + CI)
android·flutter·ios·ci/cd·小程序·uni-app·iphone
denggun1234515 小时前
ios包体积管理方案
ios·iphone
Digitally15 小时前
解决 iPhone 和 Mac 之间备忘录无法同步的9种方法
macos·ios·iphone
denggun1234515 小时前
图片上传git时压缩
git·ios·objective-c·iphone·xcode
胎粉仔16 小时前
Swift 初阶 —— Sendable 协议 & data races
开发语言·ios·swift·sendable·并发域·data races
2501_9159090616 小时前
深入理解HTTPS和HTTP的区别、工作原理及安全重要性
安全·http·ios·小程序·https·uni-app·iphone