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

字数 164阅读 74
  • 因为别人创建的一个类,暂且成为原类(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

推荐阅读更多精彩内容