我有一个viewController Controller
和一个视图view A
。此外ViewA
包含一个按钮。
通常,我们在单击按钮时调用同一类中的函数。但是我希望在单击按钮时执行controller
中的方法。
以下是我制定的两种方法:
//method 1
//UIView A
-(id)initWithSelector:(SEL)callbackInB withDelegate:(id)delagateB
{
self = [super init];
if (self)
{
delegate = delegateB;
myCB = callbackInB;
}
return self;
}
//somewhere in UIView A
[btn addTarget:delegate action:myCB forControlEvents:UIControlEventTouchUpInside];
这很好。但如果我做第二种方法,它会显示“执行选择器可能会因选择器功能未知而泄漏”。
//method 2
//somewhere in UIView A
[btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];
-(void)btnPressed:(id)sender
{
if([delegate respondsToSelector:myCB])
[delegate performSelector:myCB];
}
答案 0 :(得分:1)
块是这个问题的答案:
B类
@property (copy, nonatomic) void (^myBlock)(void);
-(id)initWithMyBlock:(void(^)(void))block
{
self = [super init];
if (self)
{
self.myBlock = block;
}
return self;
}
[btn addTarget:delegate action:@selector(btnPressed) forControlEvents:UIControlEventTouchUpInside];
- (void)btnPressed {
if (_myBlock) {
_myBlock();
}
}
注意保留周期