(转)如何在Category类中定义成员变量

转自:https://zhidao.baidu.com/question/2077039115014176428.html

 

OC是不能直接修改对象的结构体的成员变量属性,一般做法是先取出对象的结构体变量,修改该取出来的结构体变量里面的成员,再把结构体对象赋值给原来的结构体变量,在UI中为了简化代码一般对UIView做一个category,这个分类把上面修改结构体成员变量的方法封装起来,

 

@interface UIView (Extension) 
@property(nonatomic,assign)CGFloat x;
@property(nonatomic,assign)CGFloat y;
@end

#import"UIView+Extension.h"

@implementationUIView (Extension)
- (void)setX:(CGFloat)x
{
CGRect frame =self.frame;
frame.origin.x= x;
self.frame= frame;
}
- (void)setY:(CGFloat)y
{
CGRect frame =self.frame;
frame.origin.y= y;
self.frame= frame;
}
@end

 

问题来了,category是为已有的类动态添加新的行为,不能添加新的成员变量,在.h文件中为什么添加了x和y的变量?
这个就要弄清@property关键字了,在类中@property关键字会生成私有成员变量,和申明getter  setter方法,但是在分类中只会声明getter和setter方法,不会生成成员变量
扩展: 如果在.m中手动实现了setter和getter方法,x-code就不会自动生成@synthesize,也就不会生成成员变量
点语法访问的是getter方法,对象的->调用才是访问的成员变量
如果我们真的需要给category增加属性的实现,需要借助于运行时的两个函数:

objc_setAssociatedObject
objc_getAssociatedObject

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值