runtime(二)--使用runtime给分类添加属性

记得刚做开发的时候,给分类添加属性,使用的时候老是造成奔溃,后来才发现在分类中属性定义某个变量,则只会对该变量生成set,get方法的声明,不会生成实现,需要自己去写实现方法,也不会生成带下划线的成员变量。若要是想让外界访问该成员变量,1:可以在分类中用static定义全局变量,在get方法的实现中返回该成员变量 弊端:当该类销毁的时候,该属性的成员变量也不会销毁 2:在分类中利用runtime动态添加属性
*/

使用runtime给分类添加属性

#import <Foundation/Foundation.h>

@interface NSObject (Property)


/**
 * 1:@property分类:只会生成get,set方法声明,不会生成实现,需要自己手动去生成实现方法,也不会生成下划线成员属性,可以用static定义下划线的成员变量在手动实现的get方法中返回,也可以用runtime实现动态添加属性
   2:因为在分类中定义的属性不会生成下划线的成员变量,所以可以省略不写策略方式,只写定义就可以了@property NSString *name;
 */
@property NSString *name;

@end
#import "NSObject+Property.h"
#import <objc/message.h>
/**
 *    1:runtime动态添加属性: 1:为系统的类写分类,并属性定义变量,可以不写策略,并手动实现set和get方法
    2:在set方法中可以利用runtime实现动态添加属性
 objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    object:给哪个对象添加属性
    key:属性名称
    value:属性值
    policy:保存策略
 
    2:在set方法中可以将该值取出来:objc_getAssociatedObject(self, @"name");

 */
@implementation NSObject (Property)

//static NSString *_name;

- (void)setName:(NSString *)name
{
    // 让这个字符串与当前对象产生联系
    
//    _name = name;
    // object:给哪个对象添加属性
    // key:属性名称
    // value:属性值
    // policy:保存策略
    objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (NSString *)name
{
    return objc_getAssociatedObject(self, @"name");
}

@end
#import "ViewController.h"
#import "Person.h"
#import "NSObject+Property.h"




@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    NSObject *objc = [[NSObject alloc] init];
    objc.name = @"123";
    NSLog(@"%@",objc.name);
    
    // 创建字符串对象
//    NSString *str = [NSString stringWithString:@"123"];
//    
//    Person *p = [[Person alloc] init];
//    
//    p.name = str;
    
}

@end
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,734评论 7 64
  • 蚂蚁哦哦阅读 127评论 0 0
  • 李白好饮酒,杜甫的《饮中八仙歌》曾说“李白斗酒诗百篇,长安市上酒家眠。天子呼来不上船,自称臣是酒中仙”。 酒,让人...
    空中语阅读 1,302评论 0 1
  • 想不到故事的最后,我们还是输给了距离和时间。四年多了,期间我们离多聚少,是我一直没有尽到做男朋友的责任,在你...
    有毒勿扰阅读 231评论 0 0
  • 第一次听到深二代这个词是在滴滴司机口 中,一次滴滴打车去南山考试,碍于我是个闷 骚的人,一般不主动搭话...
    五月的星星阅读 1,577评论 0 0