block块和Protocol(协议)
2016-07-25 15:14
183 查看
代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。
脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:
按照调用函数的方式调用块对象变量就可以了:
int result = myBlock(4); // result是 28
plain copy
void (^printBlock)(NSString *x);
printBlock = ^(NSString* str)
{
NSLog(@"print:%@", str);
};
printBlock(@"hello world!");
运行结果是:print:hello world!
plain copy
NSArray *stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil];
NSComparator sortBlock = ^(id string1, id string2)
{
return [string1 compare:string2];
};
NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlock];
NSLog(@"sortArray:%@", sortArray);
运行结果: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
XX.m
-(void)buttonAction
{
/// 在想调用的地方调用
if ([_delegate
respondsToSelector:@selector(dissMiss)]) {
[_delegate
dissMiss];
}
}
脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:
按照调用函数的方式调用块对象变量就可以了:
int result = myBlock(4); // result是 28
1、参数是NSString*的代码块
[cpp] viewplain copy
void (^printBlock)(NSString *x);
printBlock = ^(NSString* str)
{
NSLog(@"print:%@", str);
};
printBlock(@"hello world!");
运行结果是:print:hello world!
2、代码用在字符串数组排序
[cpp] viewplain copy
NSArray *stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil];
NSComparator sortBlock = ^(id string1, id string2)
{
return [string1 compare:string2];
};
NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlock];
NSLog(@"sortArray:%@", sortArray);
运行结果: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
XX.m
-(void)buttonAction
{
/// 在想调用的地方调用
if ([_delegate
respondsToSelector:@selector(dissMiss)]) {
[_delegate
dissMiss];
}
}
相关文章推荐
- POJ 2485 Highways 最小生成树
- 图像拼接了解
- Android 使用Vitamio打造自己的万能播放器(6)――在线播放(播放列表)
- lightoj1101 ASecret Mission
- grub2的mbr分析
- Java提高篇——equals()与hashCode()方法详解
- import()函数
- c# 根据读取的配置信息删除某个目录及下所有文件
- OCX和DLL的区别
- Java:详解Java中super的几种用法并与this的区别
- 即时通讯快速建设的方法
- gearman map_reduce
- Codeforces Round #322 (Div. 2)
- LVM逻辑卷管理
- onload事件--addLoadEvent函数--我的改进
- 给电脑端网页添加手机适配
- android SQLite疑点分析
- 2016003 VS2008MFC扩展动态库与调用示例
- 8086汇编语言自学经验分享 使用offset命令获取标号的IP地址
- HTML5本地存储之Database Storage篇