4. 动态添加方法

这一点上有两点要表达一下:第一,XCode运行你在Category的.h文件申明@Property,编译通过,但运行时如果没有Runtime处理,进行赋值取值,就马上报错。第二,这一点是iOS面试当中经常面到的问题:如何给扩展添加属性?。

1)Sense:

Teacher: What's your Chinese name?

XiaoMing: I have no one.

LiHua: You should have one.

LiHua: Your Chinese name is __

在程序当中,假设XiaoMing的中没有chineseName这个属性,后来被Runtime添加一个名字叫chineseName的属性。那么,Runtime是如何做到的呢?

2)Step:

①申明chineseName属性

#import "XiaoMing.h"

@interface XiaoMing (MutipleName)

@property(nonatomic,copy) NSString *chineseName;

@end

②动态添加属性和实现方法

#import "XiaoMing+MutipleName.h"

#import

@implementation XiaoMing (MutipleName)

char cName;

-(void)setChineseName:(NSString *) chineseName{

objc_setAssociatedObject(self, &cName, chineseName, OBJC_ASSOCIATION_COPY_NONATOMIC);

}

-(NSString *)chineseName{

return objc_getAssociatedObject(self, &cName);

}

@end

③使用chineseName属性

-(void)answer{

NSLog(@"My Chinese name is %@",self.xiaoMing.chineseName);

self.chineseNameTf.text = self.xiaoMing.chineseName;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,776评论 0 9
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,733评论 7 64
  • 今天不知道为什么,从早上到公司开始第一个工作就开始出状况。先是领导嫌地上太脏,说我们懒,这么脏走的时候都不知道...
    苫枫阅读 129评论 0 0
  • 这几天宋仲基和宋慧乔结婚的消息占领了热搜,脑洞大开的网友也开始讨论起最近比较火的一个话题:“无趣的吴彦祖和风趣的高...
    职场天蓝阅读 1,462评论 0 1
  • 1、什么是“理财”呢?理财的目的就是为实现幸福生活提供物质基础——即自己的支出,而目标是建立一条能够覆盖全部支出的...
    cedric_y阅读 343评论 6 4