iOS关联对象用法小例子
来源:互联网 发布:免费seo外链工具 编辑:程序博客网 时间:2024/06/06 01:03
关联对象是指通过这种机制把两个对象关联起来,使其中一个对象称为另外一个对象的一部分.定义关联对象时可以定义内存管理语义,用以模仿定义属性时采用的"拥有关系"与"非拥有关系".
关联对象用法的好处是可以使我们的代码很整洁,处理某些逻辑变得更简单.但是在此本人要提醒各位,只应该在其他办法行不通时再考虑用它.如果滥用关联对象,有可能会令你的代码失控,难于调试.块在捕获某些变量的时候可能会造成"保留环",而"保留环"产生的原因又比较难查明,因为关联对象之间的关系没有正式定义,其内存管理语义是在关联的时候定义的,而不是预先定义好的.所以,各位在用的时候要小心,不能说,因为某个地方可以这么用就这么用.
好,话不多说,这年头,有码才合法!这就上码
我们写一个弹出框的小例子帮大家理解下关联对象
首先引入
#import <objc/runtime.h>
//设置关联对象值时,通常使用静态全局变量做键
staticvoid * LEOMyAlertViewKety =@"LEOMyAlertViewKety";
@interfaceLEOViewController ()
@end
@implementation LEOViewController
- (void)viewDidLoad
{
[superviewDidLoad];
self.view.backgroundColor =[UIColorwhiteColor];
UIButton * btnOne = [UIButtonbuttonWithType:UIButtonTypeRoundedRect];
btnOne.frame =CGRectMake(100,200,120, 40);
[btnOne setTitle:@"第一个"forState:UIControlStateNormal];
[btnOne addTarget:selfaction:@selector(buttonClick:)forControlEvents:UIControlEventTouchUpInside];
btnOne.tag =100;
[self.viewaddSubview:btnOne];
}
-(void)buttonClick:(UIButton *)sender{
switch (sender.tag) {
case100:
{
[selfmakeAlertView];
}
break;
default:
break;
}
}
-(void)makeAlertView
{
UIAlertView * alertView = [[UIAlertViewalloc]initWithTitle:@"警告"message:@"用Block的感觉还是不错的" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定",nil];
void(^block)(NSInteger) = ^(NSInteger buttonIndex){
if (buttonIndex ==1) {
NSLog(@"点击了确定");
}else
{
NSLog(@"点击了取消");
}
};
//注意,此处是将alertView对象和block关联起来
//此方法以给定的键和策略为alertView对象设置关联对象值
objc_setAssociatedObject(alertView,LEOMyAlertViewKety, block,OBJC_ASSOCIATION_COPY);
[alertViewshow];
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
//此方法根据给定的键从某对象中获取相应的关联对象值
void(^block)(NSInteger) =objc_getAssociatedObject(alertView,LEOMyAlertViewKety);
block(buttonIndex);
}
- iOS关联对象用法小例子
- iOS中的关联对象
- iOS动态关联对象
- AsyncTask用法小例子
- Handler用法小例子
- dom对象小例子
- ios指南针小例子
- ios关联的一些用法
- iOS 关联对象的使用
- iOS 利用runtime关联对象
- 一个for_each用法小例子
- 属性动画用法小例子
- log4j NDC 用法小例子
- AsyncTask的用法小例子
- 对象转型的小例子
- php面向对象小例子
- 面向对象编程小例子
- 对象方法的小例子
- android 系统启动过程笔记
- 图解linux启动过程
- 数据类型与内存存储
- php上传多张图片
- C++线性链表
- iOS关联对象用法小例子
- 15 Free eBooks on C Programming
- ASP.NET MVC 入门4、Controller与Action
- slf4j+log4j、logback 配置
- Android 编程遇到的一点记录
- POJ 1915 Knight Moves 骑士遍历问题(跳马问题)
- TCP/IP学习(27)——协议初始化与简要的接收/发送流程
- ListView嵌套Gallery时click事件被Gallery捕获
- ZOJ-3414-Trail Walk_计算几何