Objective-C 关联对象

2017-06-12  本文已影响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 语法中的选项意思一样。

上一篇 下一篇

猜你喜欢

热点阅读