首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

RunTime(3)

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对象上
返回列表