从另一个类调用的选择器函数

时间:2013-04-24 12:25:39

标签: objective-c callback performselector

我有一个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];

}

1 个答案:

答案 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();
  }
}

注意保留周期