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);

}




0 0
原创粉丝点击