objective c 的performSelector 与block

   //无参数
        
        -(void)noParam;
        
        //一个参数
        
        -(void)oneParam:(NSString *)oneParam;
        
        //两个参数
        
        -(void)oneParam:(NSString *)oneParam twoParam:(NSString*)twoParam;
        
        //最多支持两个参数
        
        
        [TestClass performSelector:@selector(noParam)];
        
        [TestClass performSelector:@selector(oneParam:)withObject:@"参数1"];
        
        [TestClass performSelector:@selector(oneParam:twoParam:)withObject:@"参数1" withObject:@"参数2"];
        
        
        
        //多参数
        
        //最多只能支持两个参数,因此多参数只能别想办法
        
        //比如将参数放在数组中,然后使用一个参数的使用方法可以实现

SEL:

1、SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法

a、把test1  test2包装成SEL类型的数据

b、根据方法地址调用对应的方法

 
 
        SEL s1 = @selector(test1);
        SEL s2 = NSSelectorFromString(@"test2");//通过NSString定义SEL
        [Test performSelector:s1];
        NSString *str = NSStringFromSelector(s1); //这样str=@“test1”;

Blocks的定义以及使用:

 int (^MySum)(int, int) = ^(int a, int b) {  
            return a+b;  
        }; 
        int b = MySum(1,2);


Block可以访问局部变量,但是不能修改但是如果要修改就要在局部变量前加关键字:__block

int a = 10;  
__block int b = 20;  
      
void (^block)();  
      
block = ^{  
NSLog(@"%d", a);    // 错误: block不能访问局部变量  
NSLog(@"%d", b);    // 正确: block可以访问用__block修饰的局部变量  
          
a = 100;    // 错误: block不能修改局部变量的值  
b = 100;    // 正确: block不能修改用__block修饰的局部变量的值  
}  


Block 可以使用typedef

typedef (^MySum)(int,int);  
        MySum sum;
        sum= ^(int a,int b) {  
            return a + b;  
        };

如果没有形参括号可以省略

p.test = t;
        void (^MyBlock)() = ^{  
            NSLog(@"Block"); 
        }; 
        MyBlock();


苹果官方建议尽量多用block,因为效率高。


 
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值