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

相关推荐
我是谁的程序员4 小时前
Mac 上生成 AppStoreInfo.plist 文件,App Store 上架
后端·ios
sweet丶5 小时前
微信Matrix 卡顿监控原理梳理与图解
ios
2501_916007477 小时前
iOS开发中抓取HTTPS请求的完整解决方法与步骤详解
android·网络协议·ios·小程序·https·uni-app·iphone
ZZH_AI项目交付11 小时前
我把 AI 最容易改坏真实 App 的地方,整理成了 skills
人工智能·ios·app
机器学习之心11 小时前
基于贝叶斯优化超参数的图卷积网络(BO-GCN)分类预测模型(附实验文档+Matlab代码)
网络·matlab·分类·分类预测模型·bo-gcn
00后程序员张11 小时前
Windows 下怎么生成 AppStoreInfo.plist?不依赖 Xcode 的方法
ide·macos·ios·小程序·uni-app·iphone·xcode
原鸣清12 小时前
iOS 自定义 Markdown 渲染实践:从成品库到可魔改 Demo
ios
Daniel_Coder12 小时前
iOS Widget 开发-18:Widget 的 SwiftUI 视图适配与设计
ios·swiftui·swift·widget·widgetcenter
Daniel_Coder12 小时前
iOS Widget 开发-17:Widget 错误处理与空状态设计
ios·swift·widget·widgetcenter
wjm04100612 小时前
简单谈谈ios开发中的UI
开发语言·ios·swift