美文网首页code
category可以添加成员变量?

category可以添加成员变量?

作者: Joe的技术博客 | 来源:发表于2015-10-06 11:39 被阅读468次

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

https://segmentfault.com/a/1190000000694656

相关文章

  • IOS基础知识-关联对象原理篇

    Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,但是可以...

  • Category能否添加成员变量

    Category能否添加成员变量,如果可以,怎么给Category添加成员变量? 不能直接给Category添加成...

  • iOS底层总结- 关联对象实现原理

    前言 Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,但...

  • iOS底层原理总结 - 关联对象实现原理

    面试题 Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,...

  • 关联对象实现原理

    问题: Category能否添加成员变量?如果可以,如何给Category添加成员变量? 1. 给Category...

  • Category-关联对象

    分类添加属性 Category能否添加成员变量?如果可以,如何给Category添加成员变量?不能直接给Categ...

  • iOS 关联对象

    由问题 category能否添加成员变量,如果可以,如何给category添加成员变量? 答案:不可以直接给cat...

  • Category能否添加成员变量,如果可以,如何添加?

    不能直接给category添加成员变量,但是可以间接实现category有成员变量的效果 方法一:可以给分类添加字...

  • 关联对象

    O、题:Category能否添加成员变量?如果可以,如何给Category添加成员变量? 答:不能直接给Categ...

  • iOS底层原理 - 关联对象

    面试题引发的思考: Q: Category能否添加成员变量?如果可以,如何给Category添加成员变量? 不能直...

网友评论

    本文标题:category可以添加成员变量?

    本文链接:https://www.haomeiwen.com/subject/chagcttx.html