objc_setAssociatedObject

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容