objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
有4个参数
1.关联的对象
2.要关联的对象的key
3.要关联的对象的key对应的value
4.要关联的对象 采用的协议 有assign,retain,copy等协议
下面就以UIAlertView为例子简单介绍一下使用方法
使用场景:在UITableView中点击某一个cell,这时候弹出一个UIAlertView,然后在UIAlertView消失的时候获取此cell的信息,我们就获取cell的indexPath
第一步:
#import
static char kUITableViewIndexKey;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
......
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"这里是xx楼"
delegate:self
cancelButtonTitle:@"好的"
otherButtonTitles:nil];
//然后这里设定关联,此处把indexPath关联到alert上
objc_setAssociatedObject(alert, &kUITableViewIndexKey, indexPath, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[alert show];
}
第二步:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0) {
NSIndexPath *indexPath = objc_getAssociatedObject(alertView, &kUITableViewIndexKey);
NSLog(@"%@", indexPath);
}
}
网友评论