文档章节

iOS之关联引用 Associate

Ethan-GOGO
 Ethan-GOGO
发布于 2016/03/01 23:24
字数 272
阅读 33
收藏 1

1.给分类category添加属性

#import "Person.h"

@interface Person (AssocRef)

@property (nonatomic, strong) NSString *emailAddress;

@end


#import "Person+AssocRef.h"
#import <objc/runtime.h>

@implementation Person (AssocRef)

static char emailAddressKey;

//将emailAddress关联self对象,将值引用到emailAddressKey地址

-(NSString *)emailAddress
{
    return objc_getAssociatedObject(self, &emailAddressKey);
}

-(void)setEmailAddress:(NSString *)emailAddress
{
    objc_setAssociatedObject(self, &emailAddressKey, emailAddress, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

@end


- (void)viewDidLoad {
    [super viewDidLoad];
    Person *p = [[Person alloc] init];
    
    p.emailAddress = @"2";
    
    NSLog(@"%@",p.emailAddress);

}


2.测试类

#import "Person.h"
@implementation Person
-(void)dealloc
{
    NSLog(@"xxxx delloc");
}

//会将Person引用到kWatcherKey,关联someting,当someting销毁的时候,Person也会销毁,然后会调用person的delloc方法
static char kWatcherKey;
- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSObject *something = [NSObject new];
    objc_setAssociatedObject(something, &kWatcherKey, [Person new], OBJC_ASSOCIATION_RETAIN);
}


3.给警告框或控件附着相关对象的好办法

#import "ViewController.h"
#import <objc/runtime.h>

//作为中转地址使用
static char kPeprensentedObject;

@interface ViewController ()<UIAlertViewDelegate>

@end

@implementation ViewController

//将sender的地址关联alertView对象。然后再从alertView对象取出sender地址,即拿出当前的button

//能够将sender的地址引入kPeprensentedObject

- (IBAction)clickBtn:(UIButton *)sender {
    
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil];
    
    objc_setAssociatedObject(alert,&kPeprensentedObject,sender,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [alert show];

    
}

//从kPeprensentedObject地址取出sender
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    UIButton *sender = objc_getAssociatedObject(alertView, &kPeprensentedObject);
    NSLog(@"%@",[[sender titleLabel] text]);
}


© 著作权归作者所有

共有 人打赏支持
Ethan-GOGO
粉丝 13
博文 174
码字总数 82033
作品 0
广州
iOS与JS交互之UIWebView-JavaScriptCore框架

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「JavaScriptCore」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),JS指前...

QiShare
08/30
0
0
iOS与JS交互之UIWebView-JSExport协议

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「JSExport」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),JS指前端(不...

QiShare
08/31
0
0
iOS与JS交互之WKWebView-WKScriptMessageHandler协议

级别:★★☆☆☆ 标签:「iOS与JS交互」「WKWebView与JS交互」「WKJSMessageHandler」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
09/02
0
0
iOS Provisioning Portal概述

注意: iOS Provisioning Portal 仅可以在PC上的 Safari和Firefox浏览器中有效。 iOS Provisioning Portal概述 概述 和 provisioning(服务提供) 助手执行的自动设置不同, iOS Provisioning...

JohnZr
2012/09/26
0
0
【PhoneGap】环境安装配置浅析

由于项目需要,需要了解PhoneGap架构以其在各个平台的环境配置,阅读了官网部分文档,总结如下。 【官网地址】 http://phonegap.com/ 【环境配置】 参考: http://phonegap.com/install/ 1. ...

嘻哈开发者
2015/01/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据学习脑图以及入门教程!

近些年,大数据的火热可谓是技术人都知道啊,很多人呢,也想学习大数据相关,所以,这里分享几个大数据脑图,希望可以让你清楚明白从哪里入门大数据,知道该学习以及掌握哪些知识点; 大数据...

董黎明
18分钟前
0
0
聊聊redis的监控工具

序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。 docker运行 docker r...

go4it
21分钟前
0
0
TypeScript基础入门之高级类型的索引类型(Index types)

转发 TypeScript基础入门之高级类型的索引类型(Index types) 高级类型 索引类型(Index types) 使用索引类型,编译器就能够检查使用了动态属性名的代码。 例如,一个常见的JavaScript模式是从...

durban
39分钟前
0
0
利用碎片化时间Get Linux系统

起初,我做着一份与IT毫无关系的工作,每月领着可怜的工资,一直想改变现状,但无从下手,也就是大家熟知的迷茫。我相信,每一个人都会或多或少的经历过迷茫,迷茫每一个选择,迷茫工作或者生...

Linux就该这么学
今天
1
0
图像显示深入学习一:Activity启动过程

一个月左右写了图像显示深入学习之文章开篇文章表明了自己近期的计划,前半年重新学习了opengl es,c++以及Linux的一些知识,觉得是时候开始看图像这一块的源码了,边看边补缺补漏吧。 作为该...

JerryLin123
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部