zoukankan      html  css  js  c++  java
  • 让Category支持添加属性与成员变量【转载】

    Category是Objective-C中常用的语法特性,通过它可以很方便的为已有的类来添加函数。但是Category不允许为已有的类添加新的属性或者成员变量。     
    一种常见的办法是通过runtime.h中objc_getAssociatedObject / objc_setAssociatedObject来访问和生成关联对象。通过这种方法来模拟生成属性。

    //NSObject+IndieBandName.h
    @interface NSObject (IndieBandName)
    @property (nonatomic, strong) NSString *indieBandName;
    @end

    上面是头文件声明,下面的实现的.m文件:

    复制代码
    // NSObject+IndieBandName.m    
    #import "NSObject+Extension.h"
    #import <objc/runtime.h>
    static const void *IndieBandNameKey = &IndieBandNameKey;    
    @implementation NSObject (IndieBandName)
    @dynamic indieBandName;
    
    - (NSString *)indieBandName {
        return objc_getAssociatedObject(self, IndieBandNameKey);
    }
    
    - (void)setIndieBandName:(NSString *)indieBandName{
        objc_setAssociatedObject(self, IndieBandNameKey, indieBandName, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    
    @end
    复制代码

     DLIntrospection

    这个和Category无关,但是也是runtime.h的一种应用。DLIntrospection,是 一个NSObject Category。它为NSObject提供了一系列扩展函数:  

    复制代码
    @interface NSObject (DLIntrospection)
    
    + (NSArray *)classes;
    + (NSArray *)properties;
    + (NSArray *)instanceVariables;
    + (NSArray *)classMethods;
    + (NSArray *)instanceMethods;
    
    + (NSArray *)protocols;
    + (NSDictionary *)descriptionForProtocol:(Protocol *)proto;
    
    
    + (NSString *)parentClassHierarchy;
    @end
    复制代码

    通过这些函数,你可以在调试时(通过po命令)或者运行时获得对象的各种信息。

  • 相关阅读:
    Android系统源代码下载
    Windows Embedded Compact 7初体验
    windowsmobile 开发环境
    Windows X64汇编入门(1)
    汇编语言的Hello World
    如何构建Win32汇编的编程环境(ONEPROBLEM个人推荐)
    音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw
    汇编开发环境
    DirectX
    关于DirectShow SDK 和Windows SDK,及DirectX SDK
  • 原文地址:https://www.cnblogs.com/g-ios/p/4891577.html
Copyright © 2011-2022 走看看