美文网首页
oc 中的延展 和 block语法

oc 中的延展 和 block语法

作者: 下页天 | 来源:发表于2016-10-10 21:34 被阅读48次
  • 外部延展
    • 外部延展的作用:用于在特定的场景,公开原类中在.m中 声明/实现 的属性、成员变量、方法
  • 内部延展--匿名延展
    • 在本类的 .m文件中声明的延展,匿名延展,可以保证在本类中使用成员变量和属性,不被外部访问,runtime可以访问.
//外部延展创建文件  Person_Pub.h
    #import "Person.h"
    @interface Person ()
    @property (nonatomic,copy) NSString *height;
    -(void)goPub;   
    @end
//匿名延展 内部延展
@interface Person ()
{
    NSString *_height;
    CGFloat _weight;
}
@property(nonatomic, copy) NSString *height;
@property (nonatomic, assign) CGFloat weight;

@end

oc中的block语法

block块语法  是一种带返回值和参数的数据类型 本质是一个函数

返回值(^block名字)(数据类型 参数名1,数据类型 参数名2)

  • 1.声明block变量

    void(^blockName)(NSInteger age,NSString *name);
    
  • 2.实现block变量

    blockName = ^(NSInteger age,NSString *name){
        NSLog(@"age = %ld  name = %@",age,name);
    }
    
  • 3.调用block

    blockName(23,@"苍姐姐");
    
    
  • 4.block作为函数参数 改变了block代码的执行顺序

    [self useBlock:^(NSString *str, NSInteger age) {
        NSLog(@"name = %@,age = %ld",str,age);
    }];
    -(void)useBlock:(void(^)(NSString * str,NSInteger age))block{
        //调用block
        block(@"苍姐姐",23);
    }
    
  • 5.block作为返回值 可以用作链式编程里面

    -(int(^)())returnABlock{
    int(^block)() = ^{
        NSLog(@"作为返回值的block被调用了");
        return 5;
    };
    return block;
    }
        int b = [self returnABlock]();
        NSLog(@"block的返回值 b = %d",b);
    
  • 链式编程实现

      //声明
    @interface JSQTool : NSObject
    @property(nonatomic,assign)CGFloat result;
    @property(nonatomic,copy)JSQTool * (^add)(NSInteger num) ;
    @end
     //实现
    @implementation JSQTool
    -(JSQTool *(^)(NSInteger))add{
      JSQTool *(^block)(NSInteger num) = ^(NSInteger num){
          _result += num;
          return self;
      };
      return block;
    }
    //调用
      JSQTool * tool = [[JSQTool alloc]init];
      CGFloat result = tool.add(10).add(20).add(30).result;
      NSLog(@"result = %f",result);
    
    

相关文章

  • oc 中的延展 和 block语法

    外部延展外部延展的作用:用于在特定的场景,公开原类中在.m中 声明/实现 的属性、成员变量、方法 内部延展--匿名...

  • 关于Block块的所有所有

    关于Block: 在我们使用OC进行iOS开发和Mac OS开发中,Block语法是我们最常见的语法之一,而且苹果...

  • 总纲

    一句代码创建常用UI控件类与对象OC中面向对象的编程思想OC基础语法复习OC中的协议OC中的block学习导航栏按...

  • swift 调用 OC中的block

    OC中声明block; OC中实现block swift中实现

  • 每日一问18——swift基础(04)及后续补充

    swift中的闭包 闭包的定义 先回忆oc中的block语法,详细可以回顾每日一问01——block 而在swif...

  • swift基础语法(十三)——闭包

    介绍 闭包和OC中的block非常相似OC中的block是匿名的函数Swift中的闭包是一个特殊的函数block和...

  • iOS block简单用法

    block 是iOS4.0之后出现的技术,block变量可以看成oc的对象,但block的语法和技术是更底层c的知...

  • Swift 闭包(二)

    OC Block 和 Swift 闭包相互调用 我们在 OC 中定义的 Block,在 Swift 中是如何调用的...

  • OC语法 Block

    问题: Block的原理、本质是什么? Block的分类? Block的捕获机制? Blcok内部的内存管理? _...

  • 谈谈Block(一)

    苹果在Mac OS X10.6 和iOS 4之后引入block语法,之后就大幅改变了OC 的编程方式。Block...

网友评论

      本文标题:oc 中的延展 和 block语法

      本文链接:https://www.haomeiwen.com/subject/dvyvyttx.html