代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。
脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:
按照调用函数的方式调用块对象变量就可以了:
int result = myBlock(4); // result是 28
1、参数是NSString*的代码块
运行结果是: print:hello world!
2、代码用在字符串数组排序
运行结果: sortArray:(
"abc 05",
"abc 1",
"abc 12",
"abc 13",
"abc 21"
)
3.最为关键是对象之间的传值操作
typedef void(^MyBlock)(NSString *str,int num); /// 1. 声明
@property (nonatomic,strong)MyBlock selectButtonAtIndex; // 定义变量
typeof(self)__weak weak = self; //在需要的地方传值
weak.selectButtonAtIndex(sender.titleLabel.text,sender.tag );
xiao.selectButtonAtIndex = ^(NSString * num,int count) { /// 在接受值得地方 接受
NSLog(@"-----MMMMM----%@-----%d", num,count );
};
二、Protocol(协议)
(一)简介
5.OC不能继承多个类(单继承)但是能够遵守多个协议。继承(:),遵守协议(< >)
6.基协议:<NSObject>是基协议,是最根本最基本的协议,其中声明了很多最基本的方法。
7.协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明。
用法(1)XX.h
#import <UIKit/UIKit.h>
/// 声明协议
@protocol MainViewControllerDelegate <NSObject>
-(void)dissMiss;
@end
@interface MainViewController : UIViewController
/// 定义协议属性
@property (nonatomic, assign)id <MainViewControllerDelegate>delegate;
@end
-(void)buttonAction
{
/// 在想调用的地方调用
if ([_delegate respondsToSelector:@selector(dissMiss)]) {
[_delegate dissMiss];
}
}