美文网首页
Objective-C 关联对象

Objective-C 关联对象

作者: 汝阴龙 | 来源:发表于2017-06-12 10:30 被阅读13次

    Objective-C 关联对象

    最近在 Mac OS X 10.6 雪豹 中新引入了关联引用。Objective-C 不能动态的添加一些属性到对象上,和其他的一些原生支持这点的语言不一样。所以之前你都不得不努力为未来要增加的变量预留好空间。在 Mac OS X 10.6 中,Objective-C 的 Runtime 已经原生的支持这个功能了。如果我们想向一个已有的类添加变量,看起来像这样…


    #import  //Cocoa

    #include  //objc runtime api’s

    @interface NSView (CustomAdditions)

    @property(retain) NSImage *customImage;

    @end

    @implementation NSView (CustomAdditions)

    static char img_key;//has a unique address (identifier)

    - (NSImage *)customImage

    {

    returnobjc_getAssociatedObject(self,&img_key);

    }

    - (void)setCustomImage:(NSImage *)image

    {

    objc_setAssociatedObject(self, &img_key,image, OBJC_ASSOCIATION_RETAIN);

    }

    @end

    objc_setAssociatedObject() 的选项,你可以在 runtime.h 文件中找到。

    /* Associated Object support. */

    /* objc_setAssociatedObject() options */

    enum {

    OBJC_ASSOCIATION_ASSIGN = 0,

    OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,

    OBJC_ASSOCIATION_COPY_NONATOMIC = 3,

    OBJC_ASSOCIATION_RETAIN = 01401,

    OBJC_ASSOCIATION_COPY = 01403

    };

    这些和 @property 语法中的选项意思一样。

    相关文章

      网友评论

          本文标题:Objective-C 关联对象

          本文链接:https://www.haomeiwen.com/subject/uuflqxtx.html