0

通常我UIButton只会以这种方式将单个选择器分配给多个 s,

    [buttonOne addTarget:self action:@selector(someAction:) forControlEvents:UIControlEventTouchUpInside];
    [buttonTwo addTarget:self action:@selector(someAction:) forControlEvents:UIControlEventTouchUpInside];
    [buttonThree addTarget:self action:@selector(someAction:) forControlEvents:UIControlEventTouchUpInside];

今天我找到了另一种方法,

    SEL selector = NSSelectorFromString(@"someAction:");

    [buttonOne addTarget:self action:selector forControlEvents:UIControlEventTouchUpInside];
    [buttonTwo addTarget:self action:selector forControlEvents:UIControlEventTouchUpInside];
    [buttonThree addTarget:self action:selector forControlEvents:UIControlEventTouchUpInside];

请注意,我将表格中的这个选择器分配给带有上述按钮的每一行。

哪种方式更有效?我假设第二种方式,因为我们只创建一次选择器,但不确定。

4

2 回答 2

1

本质上,它们是相同的。就像

NSString *myTest = @"My text";
label1.text = myText;
label2.text = myText;

相比

label1.text = @"My text";
label2.text = @"My text";

您没有创建选择器,您只是以不同的方式引用它。没有内存泄漏或什么都没有。希望你明白我的意思。

于 2014-10-31T06:09:56.790 回答
0

根据@Libran Coder 的回答,我已经仔细检查了自己以证明哪一个是最好的。

SEL selector = NSSelectorFromString(@"someAction:");

NSLog(@"%p",selector);

NSLog(@"%p",NSSelectorFromString(@"someAction:"));

两者都将位于相同的内存地址。

于 2014-10-31T06:28:15.513 回答