博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC Category 使用举例
阅读量:6848 次
发布时间:2019-06-26

本文共 1775 字,大约阅读时间需要 5 分钟。

hot3.png

category中增加一个属性(需要显式生命存取方法,不生成成员变量)

#import 
#import "UTShareContent.h"@interface UTShareContent (ItemID)@property (nonatomic, strong)  NSString *itemId;@end

runtime 保存属性的数据,需要引入<objc/runtime.h>:

使用 objc_setAssociatedObject 和 objc_getAssociatedObject 方法:

/**  * Sets an associated value for a given object using a given key and association policy. *  * @param object The source object for the association. * @param key The key for the association. * @param value The value to associate with the key key for object. Pass nil to clear an existing association. * @param policy The policy for the association. For possible values, see “Associative Object Behaviors.” *  * @see objc_setAssociatedObject * @see objc_removeAssociatedObjects */OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)    __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);/**  * Returns the value associated with a given object for a given key. *  * @param object The source object for the association. * @param key The key for the association. *  * @return The value associated with the key \e key for \e object. *  * @see objc_setAssociatedObject */OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)    __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);

这里使用 @selector(itemId) 只是提供一个const void * 类型的key, 使用其他指针也可以(比如字符串),只要保证在这个类中唯一:

#import "UTShareContent+ItemId.h"#import 
@implementation UTShareContent(ItemID)//@dynamic itemId;-(NSString *)itemId{    return objc_getAssociatedObject(self, @selector(itemId));}-(void)setItemId:(NSString *)itemId{    objc_setAssociatedObject(self, @selector(itemId), itemId, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}@end

转载于:https://my.oschina.net/u/255456/blog/487901

你可能感兴趣的文章
我的友情链接
查看>>
tomcat+jdk
查看>>
优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 磁盘I/O性能
查看>>
atg-repository.xml
查看>>
我的友情链接
查看>>
C++和Objective-C混编(官方文档翻译)
查看>>
C++学习之:文件目录操作函数
查看>>
我的友情链接
查看>>
Linux doc2unix命令
查看>>
Oracle取月份,不带前面的0
查看>>
fdisk,mount.label
查看>>
【Animations】使用一个动画动画移动视图(6)
查看>>
中间件(EJB)学习路之一——步履维艰
查看>>
SpringMVC中使用Interceptor拦截器
查看>>
windows下同时启动多个tomcat
查看>>
Linux初级运维(十一)——facl及用户及Linux终端及case语句
查看>>
corosync+pacemaker实现web高可用
查看>>
jdbc odbc jdbc-odbc
查看>>
音视频即时通讯解决方案之手机即时通讯
查看>>
写给那些傻傻想做服务器开发的朋友
查看>>