iOS category中为原类.m中的成员变量赋值

  • 因为别人创建的一个类,暂且成为原类(class A).

  • 但是别人在原类(class A).m文件中设置了成员变量(就是@property (xxx) Value *value出来一个成员变量)

  • 然后因为某种需求,你需要对这个原类(class A)创建一个category分类(class A(B))

  • 并对原类(class A)中的.m文件成员变量value赋值.

有点绕...抱歉,形容不好...我已经尽力了.在附上一张图.还不懂,下方留言
8FB3605D-B3A3-494F-8517-9B4200E3CB9E.png
这就是我碰到的问题,大概就是这么理解吧

接下来是解决问题方法

u_int count = 0;
    Ivar *ivars = class_copyIvarList([self class], &count);
    for (unsigned int i = 0; i < count; i++) {
        Ivar iva = ivars[i];
        NSString *str = [NSString stringWithCString:ivar_getTypeEncoding(iva) encoding:NSUTF8StringEncoding];
        NSLog(@"iva -> %s", ivar_getName(iva));
        NSLog(@"str -> %@", str);
        if ([str isEqualToString:@"@?"]) {//这里对应 你那个成员变量的字符,在上面log已经打印出来
            object_setIvar(self, iva, click);  
            /*
�            我在这里翻过车.....objct_setIvar这个方法的第一个参数我填成click了.
            所以一直赋值不上....然后查了一下这个方法...发现第一个是类名(这里我不确定,个人理解)
            ,第二个是iva,第三个是参数,我这个参数是block,如果你们是字符串,传字符串即可
            */
        }
    }
    free(ivars);

在附一张完整的代码图

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,908评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,764评论 18 399
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,209评论 30 471
  • 漫步桂湖,早早的月亮就出来了,挂在蓝蓝的天幕上,特别的美!广场上的人们真休闲,跳舞的,打拳的,写字的,好不热闹!小...
    张路儿阅读 311评论 0 0
  • 我遇见了你 犹如 地球遇见了太阳 ...
    愿你我都幸福阅读 586评论 2 2