關(guān)聯(lián)是指把兩個對象相互關(guān)聯(lián)起來轧抗,使得其中的一個對象作為另外一個對象的一部分。
關(guān)聯(lián)特性只有在Mac OS X V10.6以及以后的版本上才是可用的瞬测。
- (void)viewDidLoad?
{? ? [super viewDidLoad]; ? ?
?? ? ? ? ? ? ? UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];? ?
? ? ?[btn setTitle:@"按鈕" forState:UIControlStateNormal];? ?
?[self.view addSubview:btn];? ??
[btn setFrame:CGRectMake(50, 50, 50, 50)];? ?
?btn.backgroundColor = [UIColor redColor];? ??
? ? [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside]; ? ? ? ? ? }
-(void)click:(UIButton *)sender
{? ? NSString *message = @"你是誰";? ? ??
? UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"我要傳值·" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil];??
? alert.delegate = self;? ??
[alert show];? ? ??
? //#import<objc/runtime.h>頭文件
//objc_setAssociatedObject需要四個參數(shù):源對象横媚,關(guān)鍵字,關(guān)聯(lián)的對象和一個關(guān)聯(lián)策略涣楷。
//1 源對象alert
//2 關(guān)鍵字 唯一靜態(tài)變量key associatedkey
//3 關(guān)聯(lián)的對象 sender
//4 關(guān)鍵策略? OBJC_ASSOCIATION_ASSIGN
//? ? enum {
//? ? ? ? OBJC_ASSOCIATION_ASSIGN = 0,? ? ? ? ? 若引用/**< Specifies a weak reference to the associated object. */
//? ? ? ? OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, /**< Specifies a strong reference to the associated object.
//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *? The association is not made atomically. */
//? ? ? ? OBJC_ASSOCIATION_COPY_NONATOMIC = 3,? /**< Specifies that the associated object is copied.
//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *? The association is not made atomically. */
//? ? ? ? OBJC_ASSOCIATION_RETAIN = 01401,? ? ? /**< Specifies a strong reference to the associated object.
//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *? The association is made atomically. */
//? ? ? ? OBJC_ASSOCIATION_COPY = 01403? ? ? ? ? /**< Specifies that the associated object is copied.
//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *? The association is made atomically. */
//? ? };
objc_setAssociatedObject(alert, @"msgstr", message,OBJC_ASSOCIATION_ASSIGN);
//把alert和message字符串關(guān)聯(lián)起來分唾,作為alertview的一部分,關(guān)鍵詞就是msgstr狮斗,之后可以使用objc_getAssociatedObject從alertview中獲取到所關(guān)聯(lián)的對象绽乔,便可以訪問message或者btn了
//? ? 即實現(xiàn)了關(guān)聯(lián)傳值
objc_setAssociatedObject(alert, @"btn property",sender,OBJC_ASSOCIATION_ASSIGN);
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
//通過 objc_getAssociatedObject獲取關(guān)聯(lián)對象
NSString? *messageString =objc_getAssociatedObject(alertView, @"msgstr");
UIButton *sender = objc_getAssociatedObject(alertView, @"btn property");
NSLog(@"%ld",buttonIndex);
NSLog(@"%@",messageString);
NSLog(@"%@",[[sender titleLabel] text]);
//使用函數(shù)objc_removeAssociatedObjects可以斷開所有關(guān)聯(lián)。通常情況下不建議使用這個函數(shù)碳褒,因為他會斷開所有關(guān)聯(lián)折砸。只有在需要把對象恢復(fù)到“原始狀態(tài)”的時候才會使用這個函數(shù)看疗。
}
終端打印:
2015-07-22 16:18:35.294 test[5174:144121] 0
2015-07-22 16:18:35.295 test[5174:144121] 你是誰
2015-07-22 16:18:35.295 test[5174:144121] 點我
補充:該方法在button addtarget的時候@selecter只能傳一個sender睦授。但是當(dāng)想要傳一個字典或者數(shù)組的時候两芳,就可以使用關(guān)聯(lián)的方法,將dict帶入到我們的其他方法中去枷。并通過get方法取出這個dict對象