Board logo

标题: RunTime(3) [打印本页]

作者: look_w    时间: 2019-3-3 19:48     标题: RunTime(3)

如果我们使用[p performSelectorselector(eat) withObject1];带参数的,对应的写成下面这个样子的

    void eat(id self,SEL _cmd,NSNumber *n){
        NSLog(@"吃了%@",n);
    }
     
    + (BOOL)resolveInstanceMethodSEL)sel{
        if ([NSStringFromSelector(sel) isEqualToString"eat"]) {
            class_addMethod([self class], sel, (IMP)eat, "v@");
            return YES;
        }
        return [super resolveInstanceMethod:sel];
    }

    动态添加属性

本质也就是类别中添加一个属性,
因为类别中只会set get 方法声明,不会实现,也不会生成对应的下划线成员变量.看看代码

    @interface Person : NSObject
     
    @property NSString *name;
     
    @end

由于方法没有实现,所以给属性设置策略是无用的

    - (void)setNameNSString *)name{
        objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
     
    - (NSString *)name{
        return  objc_getAssociatedObject(self, @"name");
    }

将该属性关联到Person对象上




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0