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
不过,此博客代码少了个%,导致运行结果不同~~

上一篇下一篇

猜你喜欢

热点阅读