iOS学习笔记---oc语言第六天
Block 、数组高级
block本质上就是匿名函数(没有名称的函数)
block语法和函数指针很相似
回顾函数
函数:C语⾔中,实现某一类功能的代码段。
完整的函数包含两部分:函数声明、函数定义
函数声明,即函数原型。例如:int sum(int x,int y);具有两个整型参 数,一个整型返回值的函数。
函数定义,即函数实现。例如:int sum(int x,int y){
retrun x + y;
}
回顾函数指针
函数指针(变量):存放函数地址(函数名)的指针变量。
int (*p)(int x,int y) = sum;
函数指针类型:int (*)(int x,int y) 即:指向 两个整型参数,一个整型返回值函数 的指针。
函数指针变量:p 函数指针的值:sum
Block
匿名函数:没有名称的函数。 例如 int (int x, int y)
因为Block是匿名函数,block变量存放的函 数的实现,通过block变量能直接调⽤用函数
没有名称的函数应该如何调⽤用?(有名称的话,可以直接调⽤用,也
可以通过函数指针来调⽤用)
int (^block1)(int,int) = ^int (int x,int y)
{
return x + y;
};
//类型 int(^)(int,int)
//变量名 block1
//初始值
// ^int (int x,int y)
// {
// return x + y;
// }
typedef int (^BlockType)(int,int);
BlockType block2 = ^ int (int x,int y){
return x * y;
};
//给block 变量赋值时 值的特点:以 ^ 开头 函数的定义(实现),去掉函数名
block函数定义中返回值类型 可以省略 通常都会省略
int (^aa)() = ^(){
return ;
};
//当block没有参数的时候可以把函数定义后面的()省略掉
// int (^aa)() = ^{
// return 10;
// };
NSLog(@"%d",aa());
void (^hello)() = ^{
NSLog(@"hello world");
};
hello();//没有返回值没有参数的block
在block体中可以直接使用外部变量,但是不能修改这个变量 想要修改在变量前面加__block;


__block等价于static,变量存储于全局区,程序运行过程中一直存在,直到程序运行结束
全局变量不需要使用__block,存储于全局区
block与数组排序
NSArray *arr = [NSArray arrayWithObjects:@"zhao",@"qian",@"sun",@"li",@"zhou",@"wu",@"zheng",@"wang", nil];
NSArray *sortedArray = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return - [obj1 compare:obj2]; }];
//正常排序[obj1 compare:obj2]
//反着排序 - [obj1 compare:obj2]
//反着排序[obj2 compare:obj1]
NSLog(@"%@",sortedArray);
iOS中得字面量
Literals(字面量),是一种简易表示值得方法

字面量默认创建不可变的数组,字典等,要创建可变的要用完整的初始化方法创建
iOS学习笔记---oc语言第六天的更多相关文章
- iOS学习笔记---oc语言第一天
第一讲 初始类和对象 c语言的超集,允许在oc中使用c语言源代码.编译器兼容c语言程序 具备完善的面向对象特性 包含一个运行时系统 类库丰富 面向对象编程 oop 面向对象语言:c++ java ...
- iOS学习笔记---oc语言第五天
字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key- ...
- iOS学习笔记---oc语言第四天
字符串 数组 一.使用苹果帮助文档 学会使⽤用苹果帮助⽂文档是开发者的⼀一项技能 Inherits from 继承⾃自 Conforms to 遵循什么协议 Framework 属于哪个框架 Avai ...
- iOS学习笔记---oc语言第三天
继承.初始化方法 一.继承 继承的上层:父类 继承的下层:子类 继承是单向的,不能相互继承 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为 子类能继承父类全部的特征和行为(私有变量 ...
- iOS学习笔记---oc语言第九天
初级内存管理 iOS应用程序出现crash(闪退),90%以上是内存问题////其他:数组越界,方法只声明没实现 内存问题体现在两个方面:内存溢出\野指针异常 内存溢出:程序运行超出内存上限 野指针异 ...
- iOS学习笔记---oc语言第二天
实例变量与方法 一.实例变量的可见度 二.方法 oc中的方法分两种:类方法和实例方法 类方法:只能类使用 eg:+ (id)alloc 注:类方法中不能使用实例变量 实例方法:只能对象使用,eg:- ...
- iOS学习笔记---c语言第六天
函数 function 命名规范:工程名第一个字母大写,变量函数名小写,不要用拼音和中文, eg:lessonFunction 一.函数声明定义 函数是具有特定功能的代码块 作用:模块 ...
- iOS学习笔记---oc语言第十天
内存管理高级 一 属性的内部实现原理 assign retain copy assign 下的属性内部实现 setter方法 @property(nonatomic,assign)NSS ...
- iOS学习笔记---oc语言第八天
属性 能在一定程度上简化代码,并且增强实例变量的访问安全性 属性的声明:使用@property声明属性 eg:@property NSSstring *name;相当于@interface中声明了两 ...
随机推荐
- Assert断言测试
assert编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式.断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真.可以在 ...
- ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
核心提示:大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有 ...
- javascrip自定义对象的方式
对象初始化方式(也叫json对象创建方式) <script type="text/javascript"> var User = { name:"paul&q ...
- 走进AngularJs(七) 过滤器(filter) - 吕大豹
时间 2013-12-15 16:22:00 博客园-原创精华区 原文 http://www.cnblogs.com/lvdabao/p/3475426.html 主题 AngularJS 过滤器 ...
- 【STL】-list的用法
初始化: #include <list> list<char> clist; 算法: clist.push_back(c); clist.remove('d'); 代码: #i ...
- ubuntu安装vim
1.安装 sudo apt-get install vim-gtk 2.安装完成之后,在命令行敲入vi,按“tab”键,可以看到,已经有vim命令的存在,安装成功. 3.配置 sudo vim /et ...
- Android中 服务里的方法抽取成接口
1 写个类继承Service 重写 onBind方法 返回一个IBinder 对象(传递到连接成功时用) 2 服务中 写一个内部类 继承IBinder 并且实现一个接口(用于抽取方法)继承IBinde ...
- MySQL v5.1.72 + v5.6.19
MYSQL是一个多线程的,结构化查询语言(SQL)数据库服务器.SQL 在世界上是最流行的数据库语言.MySQL 的执行性能非常高,运行速度非常快,并非常容易使用.是一个非常捧的数据库. MySQL ...
- (转)UIApplication sharedApplication详细解释-IOS
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...
- 《Java7中 下划线的新特性》
//Java7引入了一个新功能:程序员可以在数值中使用下画线,不管是 //整形数值,还是浮点型数值,都可以自由地使用下划线.通过下划线 //分隔,可以更直观的分辨数值中到底有多少位. public c ...