zoukankan      html  css  js  c++  java
  • 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】

  • 相关阅读:
    反射
    特性(Attribute)
    简单了解Ado.net(下)
    幸福不会来敲门
    C#网络编程之服务客户模式在控制台下的简单交互
    简单了解Ado.net(上)
    简单实体框架
    自己动手写泛型List<T>
    opencv学习之路(1)
    C语言学习之文件操作(含重庆大学研究生程序设计大赛的题目和解答)
  • 原文地址:https://www.cnblogs.com/xiu619544553/p/5283435.html
Copyright © 2011-2022 走看看