- 外部延展
- 外部延展的作用:用于在特定的场景,公开原类中在.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);
网友评论