网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 iOS 运行时添加属性和方法
内容
    第一种:runtime.h里的方法BOOL class_addProperty(Class cls, const char *name,
    const objc_property_attribute_t *attributes, unsigned int attributeCount)
    #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);}
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/20 12:32:55