zoukankan      html  css  js  c++  java
  • ios runtime简单实用(添加动态属性)

    #import "Person.h"

    @interface Person (PersonCategory)
     
    // 添加Person中没有的name属性
    @property (nonatomic, copy) NSString *name;

    @end
     
     
    #import "Person+PersonCategory.h"
    #import <objc/runtime.h>

    @implementation Person (PersonCategory)
    //定义常量 必须是C语言字符串
    static char *PersonNameKey = "PersonNameKey";

    - (void)setName:(NSString *)name {
        /*
         OBJC_ASSOCIATION_ASSIGN;            //assign策略
         OBJC_ASSOCIATION_COPY_NONATOMIC;    //copy策略
         OBJC_ASSOCIATION_RETAIN_NONATOMIC;  // retain策略
        
         OBJC_ASSOCIATION_RETAIN;
         OBJC_ASSOCIATION_COPY;
         */
        /*
         * id object 给哪个对象的属性赋值
         const void *key 属性对应的key
         id value  设置属性值为value
         objc_AssociationPolicy policy  使用的策略,是一个枚举值,和copy,retain,assign是一样的,手机开发一般都选择NONATOMIC
         objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
         */
       
       
        objc_setAssociatedObject(self, PersonNameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }

    - (NSString *)name {
        return objc_getAssociatedObject(self, PersonNameKey);
    }
     
  • 相关阅读:
    MySQL 8.0系列——轻松改配置,云上友好
    测试expire_logs_days参数
    mongodb单实例安装
    搭建PXC集群指引
    控制mysqldump导出的SQL文件的事务大小
    实战MySQL8.0.17 Clone Plugin
    windows环境下 curl 安装和使用
    git 创建tag , 查看tag , 删除tag
    git 基本操作
    git 一个分支完全覆盖另一个分支
  • 原文地址:https://www.cnblogs.com/xsyl/p/6419522.html
Copyright © 2011-2022 走看看