原理:利用局部变量生存期局限在当前函数或者当前代码块的原理,实现C++里AutoLock的概念,其实也就是智能指针的概念.
利用局部变量在创建时执行按钮的setEnable为NO,在函数结束,且无block的情况下setEnable为YES.如果有block,需要调下blockIt函数,其实里面啥都不干,就是为了让LLVM知道这个变量要在block结束后才释放.
头文件
@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
使用了ARC
转载请注明出处.
写博客的目的:记录,升华,量变到质变
浙公网安备 33010602011771号