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

相关推荐
皇上o_O3 小时前
深入理解 Swift Concurrency:从 async/await 到隔离域
ios
子夜江寒4 小时前
基于贝叶斯的评论分类实例
机器学习·分类
CocoaKier5 小时前
1月12日最新用户隐私保护政策出炉,政策解读
ios
Lun3866buzha8 小时前
手机类型识别与分类_功能手机_折叠手机_滑盖手机_智能手机检测方法
智能手机·分类·数据挖掘
Lun3866buzha8 小时前
轮胎胎面花纹识别与分类:基于solo_r50_fpn模型的实现与优化
人工智能·分类·数据挖掘
山海青风8 小时前
图像识别零基础实战入门 3 第一次训练图像分类模型
图像处理·人工智能·分类
kisshuan123968 小时前
电信杆塔类型识别与分类_fovea_r101_fpn_4xb4-2x_coco模型详解_模型训练与验证_通俗易懂!入门必看系列!
人工智能·目标跟踪·分类
Mr -老鬼8 小时前
移动端跨平台适配技术框架:从发展到展望
android·ios·小程序·uni-app
shangjian0078 小时前
AI大模型-机器学习-分类
人工智能·机器学习·分类
Lun3866buzha9 小时前
基于FCOS和HRNet的易拉罐缺陷检测与分类系统:实现工业质检自动化,提升检测精度与效率_1
分类·数据挖掘·自动化