iOS分类和扩展的区别

分类:在不改变原有类的基础上,为原有类添加方法。不可定义属性,只能定义getter和setter方法。

作用:一般用来为系统的类扩展方法或者把某个复杂的类的按照功能拆到不同的文件里。

objectivec 复制代码
NSString+PhoneNumber.h
#import <Foundation/Foundation.h>

@interface NSString (phoneNumber)

- (NSString *)phoneNumber;

@end

NSString+PhoneNumber.m

@implemention NSString (phoneNumber)

- (NSString *)phoneNumber
{
    if (self.length == 11 && [self hasPrefix:@"1"]) {
        return [@"+86" stringByAppendingString:self];
    }
    return self;
}
@end

扩展:也叫做匿名分类,为原有类添加私有变量和方法。

作用:一般用扩展来声明私有属性,或者把.h的只读属性重写成可读写的。

objectivec 复制代码
UITestManager.h

@interface UITestManager: NSObject

@property(nonatomic, assign) BOOL isIUest;

@end


UITestManager.m

@interface UITestManager() 

@property(nonatomic, assign) BOOL testKey;

@end

@implementation UITestManager

- (void)setup() {
}

@end

分类和扩展的区别

1.分类是在运行时把分类信息合并到类信息中,而扩展是在编译时,就把信息合并到类中。

2.分类声明的属性,只有生成getter/setter的声明,不会自动生成成员变量和getter/setter的实现,而扩展会。

3.分类不可以为类添加实例变量而扩展可以。

4.分类可以为类添加方法的实现而扩展只能声明方法,不能实现。

分类的局限性:

1.无法为类添加添加实例变量,但可以通过关联对象实现。

2.分类的方法若和类中原本的实现重名,会覆盖原本方法的实现。(非真正意义上的覆盖)

3.多个分类的方法重名,会调用最后编译的那个分类的实现。

相关推荐
茶底世界之下16 小时前
iPhone Duo 适配实战,Awaking 踩过的 8 个坑
ios·swiftui·swift
跨境数据猎手17 小时前
HTTP 响应体编码与压缩:识别、解码
网络协议·http·ios
计算机毕业编程指导师18 小时前
基于深度学习的花卉图像分类识别系统(PyTorch + ResNet50 + Django)
pytorch·python·深度学习·分类·毕业设计·迁移学习·图像分类
也非非也18 小时前
iPhone 中国区 AI 落地:Apple 与阿里千问合作的技术观察
大数据·人工智能·ios·agent·iphone·智子
茶底世界之下19 小时前
同一片泳池,清透还是奶油胶片?用 Awaking 做两版成片
ios
阿俊-全栈开发20 小时前
LikeShop 多商户标准版智能商品分类与标签自动打标:大模型+向量检索二开实践
大数据·人工智能·分类·likeshop·likeshop开源商城
皮皮学姐分享-ppx20 小时前
上市公司研发费用分类操纵强度数据(2011—2025)
人工智能·分类·数据挖掘
2501_9160088921 小时前
iOS App 图标、启动屏和多语言搭配 方法,上架前使用KXBuild一次做好 App 图标
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
小王师傅6621 小时前
分类是科学的基础
人工智能·分类
2501_9159184121 小时前
iOS 推送通知怎么实现,从 APNs p8 密钥到 iOS 真机收到第一条推送
vscode·ios·objective-c·个人开发·swift·敏捷流程