Runtime实现 属性替代

来源:互联网 发布:离线翻译软件 知乎 编辑:程序博客网 时间:2024/05/01 16:51

.H

#import <Foundation/Foundation.h>


#pragma mark--分类不能添加属性属性实现没有

@interface NSObject (objc)

@property(nonatomic,copy)NSString *classNamep;


@property(nonatomic,copy)NSString *mainTitle;


@end



.M

#import <objc/message.h>

#import "NSObject+objc.h"


@implementation NSObject (objc)


static NSString *_classNamep;


-(void)setClassNamep:(NSString *)classNamep{

    _classNamep=classNamep;

}


-(NSString *)classNamep{

    return_classNamep;

}


#pragma mark--运行时实现

-(void)setMainTitle:(NSString *)mainTitle{

    

    //添加属性跟对象

    //给某个对象产生关联添加属性

    

    //object 给那个对象关联

    //key 属性名根据key获取关联的对象

    //value 关联的值

    //policy 策略用什么策略保存

    

//    void*万能指针

    objc_setAssociatedObject(self,@"mainTitle", mainTitle,OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    

    

}

-(NSString *)mainTitle{

  return  objc_getAssociatedObject(self,@"mainTitle");

}

@end




    运用

    NSObject  *objc=[[NSObjectalloc] init];

    objc.classNamep=@"CC";

    

    objc.mainTitle=@"sdfsd";

    NSLog(@"%@",objc.mainTitle);



0 0
原创粉丝点击