#import <Foundation/Foundation.h>
#import <objc/runtime.h>
int
main (
int
argc,
const
char
* argv[]) {
@autoreleasepool
{
static
char
overviewKey;
static
const
char
*myOwnKey =
"VideoProperty\0"
;
static
const
char
intValueKey =
'i'
;
NSArray
*array = [[
NSArray
alloc]
initWithObjects:@
"One"
, @
"Two"
, @
"Three"
,
nil
];
NSString
*overview = [[
NSString
alloc]
initWithFormat:@
"%@"
, @
"First three numbers"
];
NSString
*videoKeyValue = @
"This is a video"
;
NSNumber
*intValue = [[
NSNumber
alloc]initWithInt:5];
objc_setAssociatedObject (
array,
&overviewKey,
overview,
OBJC_ASSOCIATION_RETAIN
);
[overview release];
objc_setAssociatedObject (
array,
myOwnKey,
videoKeyValue,
OBJC_ASSOCIATION_RETAIN
);
objc_setAssociatedObject (
array,
&intValueKey,
intValue,
OBJC_ASSOCIATION_RETAIN
);
NSString
*associatedObject = (
NSString
*) objc_getAssociatedObject (array, &overviewKey);
NSLog
(@
"associatedObject: %@"
, associatedObject);
NSString
*associatedObject2 = (
NSString
*) objc_getAssociatedObject(array, myOwnKey);
NSLog
(@
"Video Key value is %@"
, associatedObject2);
NSString
*assObject3 = (
NSString
*) objc_getAssociatedObject(array, &myOwnKey);
if
( assObject3 )
{
NSLog
(@
"不会进入这里! assObject3 应当为nil!"
);
}
else
{
NSLog
(@
"OK. 通过myOwnKey的地址是得不到数据的!"
);
}
NSNumber
*assKeyValue = (
NSNumber
*) objc_getAssociatedObject(array, &intValueKey);
NSLog
(@
"Int value is %d"
,[assKeyValue intValue]);
objc_setAssociatedObject (
array,
&overviewKey,
nil
,
OBJC_ASSOCIATION_ASSIGN
);
objc_setAssociatedObject (
array,
myOwnKey,
nil
,
OBJC_ASSOCIATION_ASSIGN
);
objc_setAssociatedObject (
array,
&intValueKey,
nil
,
OBJC_ASSOCIATION_ASSIGN
);
[array release];
}
return
0;
}