html5中文学习网

您的位置: 首页 > ios » 正文

iOS 运行时添加属性和方法_IOS开发

[ ] 已经帮助:人解决问题

 hHGHTML5中文学习网 - HTML5先行者学习网

第一种:runtime.h里的方法BOOL class_addProperty(Class cls,    const char *name,    const objc_property_attribute_t *attributes,    unsigned int attributeCount)
hHGHTML5中文学习网 - HTML5先行者学习网
#include <objc/runtime.h>#import <Foundation/Foundation.h>@interface SomeClass : NSObject {    NSString *_privateName;}@end@implementation SomeClass- (id)init {    self = [super init];    if (self) _privateName = @"Steve";    return self;}@endNSString *nameGetter(id self, SEL _cmd) {    Ivar ivar = class_getInstanceVariable([SomeClass class], "_privateName");    return object_getIvar(self, ivar);}void nameSetter(id self, SEL _cmd, NSString *newName) {    Ivar ivar = class_getInstanceVariable([SomeClass class], "_privateName");    id oldName = object_getIvar(self, ivar);    if (oldName != newName) object_setIvar(self, ivar, [newName copy]);}int main(void) {    @autoreleasepool {        objc_property_attribute_t type = { "T", "@/"NSString/"" };        objc_property_attribute_t ownership = { "C", "" }; // C = copy        objc_property_attribute_t backingivar  = { "V", "_privateName" };        objc_property_attribute_t attrs[] = { type, ownership, backingivar };        class_addProperty([SomeClass class], "name", attrs, 3);        class_addMethod([SomeClass class], @selector(name), (IMP)nameGetter, "@@:");        class_addMethod([SomeClass class], @selector(setName:), (IMP)nameSetter, "v@:@");        id o = [SomeClass new];        NSLog(@"%@", [o name]);        [o setName:@"Jobs"];        NSLog(@"%@", [o name]);    }}输出:SteveJobs第二种:- (id)valueForUndefinedKey:(NSString *)key第三种:static char const * const ObjectTagKey;@implementation NSObject (ExampleCategoryWithProperty)@dynamic objectTag;- (id)objectTag {    return objc_getAssociatedObject(self, ObjectTagKey);}- (void)setObjectTag:(id)newObjectTag {    objc_setAssociatedObject(self, ObjectTagKey, newObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助