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.多个分类的方法重名,会调用最后编译的那个分类的实现。

相关推荐
游戏开发爱好者820 分钟前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
黑码哥41 分钟前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
是小蟹呀^2 小时前
从稀疏到自适应:人脸识别中稀疏表示的核心演进
人工智能·分类
2501_915106322 小时前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
2501_915106322 小时前
使用 Sniffmaster TCP 抓包和 Wireshark 网络分析
网络协议·tcp/ip·ios·小程序·uni-app·wireshark·iphone
熊猫钓鱼>_>3 小时前
移动端开发技术选型报告:三足鼎立时代的开发者指南(2026年2月)
android·人工智能·ios·app·鸿蒙·cpu·移动端
AAD5558889913 小时前
YOLO11-EfficientRepBiPAN载重汽车轮胎热成像检测与分类_3
人工智能·分类·数据挖掘
小徐xxx21 小时前
Softmax回归(分类问题)学习记录
深度学习·分类·回归·softmax·学习记录
AAD5558889921 小时前
YOLOv8-MAN-Faster电容器缺陷检测:七类组件识别与分类系统
yolo·分类·数据挖掘
JicasdC123asd21 小时前
【工业检测】基于YOLO13-C3k2-EIEM的铸造缺陷检测与分类系统_1
人工智能·算法·分类