亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        iOS 運(yùn)行時添加屬性和方法

        字號:


            第一種: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);}