原理:利用局部變量生存期侷限在當前函數或者當前代碼塊的原理,實現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