原理:利用局部变量生存期局限在当前函数或者当前代码块的原理,实现C++里AutoLock的概念,其实也就是智能指针的概念.函数
利用局部变量在建立时执行按钮的setEnable为NO,在函数结束,且无block的状况下setEnable为YES.若是有block,须要调下blockIt函数,其实里面啥都不干,就是为了让LLVM知道这个变量要在block结束后才释放.指针
头文件blog
@interface D1AutoDisableButton : NSObject { UIButton* sender; } //调用接口,声明一个临时变量,注意不能是全局的或者self成员级的,若是要跨函数调用,请将其做为参数传递 +(id)objectWithButton:(UIButton*)obj; //在block里随便作点什么,否则变量就在block执行前就释放了. -(void)blockIt; @end
实现接口
@implementation D1AutoDisableButton -(id)init { [super doesNotRecognizeSelector:_cmd]; return nil; } +(id)objectWithButton:(UIButton*)obj { D1AutoDisableButton* lockObj = [[D1AutoDisableButton alloc]initWithParam:obj]; return lockObj; } -(id)initWithParam:(UIButton*)obj { sender = obj; [sender setEnabled:NO]; // NSLog(@"auto disable:%x",sender); return self; } -(void)dealloc { [sender setEnabled:YES]; //NSLog(@"auto enable:%x",sender); } -(void)blockIt { //NSLog(@"block call it"); } @end
使用了ARCcmd