Objective-C之Category
来源:互联网 发布:接收chinanet的软件 编辑:程序博客网 时间:2024/05/17 08:40
Category的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法。在 Objective-C 中的具体体现为:实例(类)方法、属性和协议。
使用场景
- 给现有的类添加方法;
- 将一个类的实现拆分成多个独立的源文件;
- 声明私有的方法。
注意事项:
1.不能覆写原有类的方法
原因:将分类方法加入类中是在运行期系统加载分类时完成的。运行期系统把分类中所实现的每个方法都加入类的方法列表中。如果类中本来就有此方法,而分类又实现了一次,那么分类会覆盖原来那一份实现代码。
2.在分类中添加属性,要自己实现存取方法setter和getter
原因:分类中无法新增实例变量,因此编译器无法通过属性把实例变量所需的存取方法生成出来。这时,需要我们在分类中为属性实现存取方法。此时可以把存取方法声明为@dynamic,也就是说,这些方法等到运行期再提供。
可以通过关联对象来实现属性存取方法,使用运行时的这两个方法管理关联对象:
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
id objc_getAssociatedObject(id object, const void *key);
把属性关联到分类中,属性通过“键”来区分。存储属性值的时候,可以指明“存储策略”,用以维护相应的“内存管理语义”。存储策略由名为objc_AssociationPolicy的枚举所定义。这些值跟属性定义中的nonatomic,copy,retain等关键字的功能类似。
实例
下面是一个属性自定义getter和setter的例子:
@interfaceEOCPerson (FriendShip)
@property (nonatomic,strong)NSArray *friends;
@end
static const char *kFriendPropertyKey = "kFriendsPropertyKey";
@implementationEOCPerson (FriendShip)
- (NSArray*) friends {
return objc_getAssociatedObject(self,kFriendPropertyKey);
}
- (void)sefFriends:(NSArray*)friends {
objc_setAssociatedObject(self,kFriendPropertyKey, friends,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@property (nonatomic,strong)NSArray *friends;
@end
static const char *kFriendPropertyKey = "kFriendsPropertyKey";
@implementationEOCPerson (FriendShip)
- (NSArray*) friends {
return objc_getAssociatedObject(self,kFriendPropertyKey);
}
- (void)sefFriends:(NSArray*)friends {
objc_setAssociatedObject(self,kFriendPropertyKey, friends,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
可以看出使用objc_setAssociatedObject和objc_getAssociatedObject函数可以很方便的实现属性的getter和setter。
0 0
- Objective-C之category
- Objective-C之Category
- Objective-C之Category
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- objective-c之Category和Extension
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- 【iOS】Objective-C之Category的使用
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- Objective-C使用Category
- Category 类别 -Objective-C
- Category 类别 -Objective-C
- 领导者追随者模式
- CentOS-6.5-x86_64-minimal 搭建mysql-5.6.29
- 《数据结构与算法分析》—栈的链表和数组实现(C语言)
- leetcode 4. Median of Two Sorted Arrays
- 自动化运维工具SaltStack详细部署
- Objective-C之Category
- Git学习(四)
- Storm使用到的相关技术总结
- 面试
- java 读取属性文件 properties
- LInux vim 显示行号
- 细说马斯洛需求层次理论与产品的关系——老吴说产品
- PS新手教程!五分钟绘制一张半调效果的耐克体育海报
- 《深入理解Java虚拟机》