分类与扩展
来源:互联网 发布:上海婚纱摄影推荐知乎 编辑:程序博客网 时间:2024/06/07 06:01
一,分类
分类不可以添加属性,在编译阶段不会报错,但是在运行的时候会报错,崩溃,原因是找不到setter方法
如果想要给分类添加属性,应该使用runtime,例如为分类添加属性:
@property (nonatomic,copy) NSString *userId;
在.m文件中实现下面这两个方法
-(void)setUserId:(NSString *)userId
{
objc_setAssociatedObject(self, NULL, userId,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString *)userId
{
return objc_getAssociatedObject(self, NULL);
}
分类也不可以添加实例变量,在编译阶段就会报错;
分类可以添加方法;
分类方法添加注意点:
1、分类中不能扩展原有类的成员变量
2、@property在分类中只能生成getter setter方法的声明,不能生成实现和成员变量
*分类可以扩充系统自带的类的功能*
给NSObject增加分类会影响到所有的类,但是这个东西一定要谨慎小心
3、你不能在分类中定义与原有类同名方法,不同的分类之间也不可以有同名的方法
4、如果你再分类中增加一个原有类同名方法 ,那么分类中个方法会覆盖原有类的方法(哪怕你没有导入这个分类)
5、多个分类中如果有相同方法,最后编译分类的方法
二,扩展是一种匿名分类,但是和匿名分类不一样的是,扩展可以添加新的实例变量和属性
从Xcode4之后就会推荐在自定义类的.m文件中使用扩展,这样就能保证良好的代码封装性,避免把私有接口暴露在外面.例如:
.h文件
@interface MyClass : NSObject
- (float)value;
@end
.h文件
@interface MyClass () { //注意此处:扩展
float value;
}
- (void)setValue:(float)newValue;
@end
@implementation MyClass
- (float)value {
return value;
}
- (void)setValue:(float)newValue {
value = newValue;
}
- 分类与扩展
- 类扩展与分类
- Objective- c 分类 与 扩展
- IOS开发-分类与扩展
- OC中的分类与类扩展
- objective-c 的分类与扩展
- iOS - 类扩展与分类的区别
- iOS - 类扩展与分类的区别
- iOS - 类扩展与分类的区别
- OC中的分类与类扩展
- 关于分类category与类扩展extension的区别
- iOS入门编程之类扩展与分类的区别
- Qt 扩展模块分类
- Shell 扩展的分类
- 分类关于扩展
- 分类 and 扩展
- 分类、扩展和协议
- 类扩展 & 分类
- HDU 5671 Matrix
- Web开发(二)--JSP
- MATLAB函数运算
- IIR型高斯滤波的原理及实现
- HDU 5673 Robot
- 分类与扩展
- 求最长有效匹配括号子串的长度(Longest Valid Parentheses)
- iOS--UINavigationController学习笔记
- link和@import的区别
- 几个Android开发中遇到的问题
- servlet详解(第三篇)
- android 的四种枚举Context.MODE_PRIVATE
- 安装Baidu Eclipse插件
- 【codevs】基础合集(二)