iOS裏防止按鈕被屢次點擊的辦法

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

相關文章
相關標籤/搜索