makeObjectsPerformSelector用法

亲测 makeObjectsPerformSelector 的用法。

1 - (void)makeObjectsPerformSelector:(SEL)aSelector NS_SWIFT_UNAVAILABLE("Use enumerateObjectsUsingBlock: or a for loop instead");
2 - (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(nullable id)argument NS_SWIFT_UNAVAILABLE("Use enumerateObjectsUsingBlock: or a for loop instead");

苹果提供,NSSet 和 NSArray 的两个接口。大概意思:

方法1:集合或数组里面的每一个元素都去执行 aSelector 。

方法2:集合或数组里面的每一个元素都去执行 aSelector 。且把 withObject 后边的 argument 对象做为参数传给方法 aSelector。

Test1:

 1 #pragma mark - View lifeCycle
 2 - (void)viewDidLoad {
 3     [super viewDidLoad];
 4     self.view.backgroundColor = [UIColor colorWithRed:1.000 green:0.814 blue:0.614 alpha:1.000];
 5     [self.view addSubview:self.a];
 6     [self.view addSubview:self.b];
 7     [self.view addSubview:self.c];
 8     [self.view addSubview:self.d];
 9     [self.array addObjectsFromArray:@[self.a, self.b, self.c, self.d]];
10     [self performSelector:@selector(doIt) withObject:nil afterDelay:1.f];
11 }
12 
13 - (void)doIt {
14     [self.array makeObjectsPerformSelector:@selector(setHidden:) withObject:@YES];
15 }

事实证明,1.秒之后,数组里面的四个UILabel对象都会被 Hidden。

Test2:

Selector 方法选择器中的方法执行之后,数组里面元素的属性是否发生了改变?(摘自<Stack Overflow>的问题)

1 - (void)doIt {
2     [self.array makeObjectsPerformSelector:@selector(setTitle)];
3     for (UILabel *obj in self.array) {
4         NSLog(@"obj = %@", obj.text);
5     }
6 }

打印结果如下:

1 2016-03-16 14:24:08.517 Demo_Test[2519:310351] obj = 这是一个测试
2 2016-03-16 14:24:08.518 Demo_Test[2519:310351] obj = 这是一个测试
3 2016-03-16 14:24:08.518 Demo_Test[2519:310351] obj = 这是一个测试
4 2016-03-16 14:24:08.519 Demo_Test[2519:310351] obj = 这是一个测试

事实证明,使用 makeObjectsPerformSelector 之后,数组元素的属性的确发生了变化。

部分说明:

其中 self.a 是 MyLabel 的实例。 MyLabel 继承自 UILabel
 
@interface MyLabel : UILabel

/** 改变背景颜色 */
- (void)setBGColor;
/** 改变文字 */
- (void)setTitle;

@end

 疑问:关于这个 aSelector 方法选择器的方法,只能是数组元素的类所拥有的方法接口??

如果存在错误,欢迎批评指正!

尊重作者劳动成果,转载请注明: 转载自【kingdev】

原文地址:https://www.cnblogs.com/xiu619544553/p/5283435.html