美文网首页
objc_setAssociatedObject

objc_setAssociatedObject

作者: Miss_chalk | 来源:发表于2015-03-12 10:34 被阅读473次
    #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
    不过,此博客代码少了个%,导致运行结果不同~~

    相关文章

      网友评论

          本文标题:objc_setAssociatedObject

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