objc_setAssociatedObject
2015-03-12 本文已影响473人
Miss_chalk
#import "ViewController.h"
#import <objc/runtime.h>
static char alertInfoKey;
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSString* dataYouWantToPass = @"some info";
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"hello" message:@"miss-chalk" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"YES", nil];
[alert show];
objc_setAssociatedObject(alert, &alertInfoKey, dataYouWantToPass, OBJC_ASSOCIATION_RETAIN);
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString* data = objc_getAssociatedObject(alertView, &alertInfoKey);
NSLog(@"%@",data);
}
@end
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
static char overviewKey;
NSArray *array =[[NSArray alloc] initWithObjects:@"One", @"Two", @"Three", nil];
//为了演示的目的,这里使用initWithFormat:来确保字符串可以被销毁
NSString * overview = [[NSString alloc] initWithFormat:@"%@",@"First three numbers"];
objc_setAssociatedObject(array, &overviewKey, overview, OBJC_ASSOCIATION_RETAIN);
[overview release];
NSString *associatedObject = (NSString *)objc_getAssociatedObject(array, &overviewKey);
NSLog(@"associatedObject:%@", associatedObject);
objc_setAssociatedObject(array, &overviewKey, nil, OBJC_ASSOCIATION_ASSIGN);
[array release];
}
return 0;
}
运行结果: 2013-09-17 15:32:31.773 objc_setAssociatedObject[2830:303] Hello, World! 2013-09-17 15:32:31.776 objc_setAssociatedObject[2830:303] associatedObject:First three numbers
借鉴:
http://blog.csdn.net/zhangxingping/article/details/7619444?reload
不过,此博客代码少了个%,导致运行结果不同~~