zoukankan      html  css  js  c++  java
  • 快速上手Runtime(二)之给分类添加属性

    我们都知道,分类是不能直接添加属性的,那么我们有时候又需要实现这个功能,那么我们应该怎么办才能为分类添加上属性呢。

    Runtime给分类添加属性原理

    给一个类声明属性,其实本质就是给这个类添加关联,并不是直接把这个值的内存空间添加到类存空间。

    Runtime给分类添加属性步骤

    1.在分类的.h文件中声明想要定义的属性

    2.在分类的.m文件中实现getter和setter方法

    3.引入runtime头文件,然后在setter方法中用objc_setAssociatedObject关联对象

    比如给NSObject建一个分类,分类里面添加一个name 属性:

    #import <Foundation/Foundation.h>
    
    @interface NSObject (Name)
    
    @property (nonatomic,copy)NSString *name;
    
    @end
    
    
    
    #import "NSObject+Name.h"
    #import <objc/runtime.h>
    
    static void *kName = &kName;
    @implementation NSObject (Name)
    
    -(void)setName:(NSString *)name
    {
        // object:给哪个对象添加属性
        // key:属性名,根据key去获取关联的对象 ,void * == id
        // value:关联的值
        // policy:策略
        objc_setAssociatedObject(self, kName, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    
    - (NSString *)name
    {
        return objc_getAssociatedObject(self, kName);
    }
    
    @end

    实例效果:

    Demo地址:https://github.com/domanc/NSObject_Category.git

  • 相关阅读:
    第一阶段冲刺8
    第一阶段冲刺7
    第一阶段冲刺6
    第一阶段冲刺5
    第一阶段冲刺4
    第一阶段冲刺3
    冲刺阶段二
    典型用户和用户场景
    团队题目需求分析-NABCD
    第二阶段第七天
  • 原文地址:https://www.cnblogs.com/dianming/p/6602730.html
Copyright © 2011-2022 走看看