makeObjectsPerformSelector用法

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】

posted @ 2016-03-16 14:35 Kingdev 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值