objective-c的代码块block
一、block
1.bock是由于^开头,括号里面填写参数类型。
标准代码块:
返回值 (^代码块名称) (参数类型) = ^(参数) {方法体};
2.我们的块即可以定义在函数内或者对象方法内,也可以定义在函数外或则对象方法外.m文件内。
3.定义在对象方法内或者函数内代码块可以访问函数内部的变量或者对象方法中的属性。
4.外部代码块可以对对象中得属性进行修改或者指针中的数据,对于基本数据类型是不可以修改的。
5.内部block中修改函数的内部变量时,需要对被需改得变量前增加__block使调用block时将其传入到block中。
6.在定义代码块的时候,我们应该注意,如果对象的中的.m文件定义一个与其他对象.m文件中得代码块会报同名错误。
main.h
#import <Foundation/Foundation.h>
#import "Person.h"
//定义在外面的代码块
void (^myblock) (int) = ^(int i) { NSLog(@"this is block%i",i); } ; //测试对象得代码块
void testPeronBlock(){
//对象内调用代码块
Person *p = [[Person alloc]init];
NSString *myname = [NSString stringWithFormat:@"小明"];
p.name = myname;
[p say]; } //调用外部block
void outerBlock(){
//带参数的块
myblock();
}
/**
改变值
*/
void changA(){
//尝试该变其值,由于是形参所以不可以改变a得值
int a = ;
void (^changA) (int) = ^(int i) {
i = ;
} ;
changA(a);
NSLog(@"A得值为 %i",a); }
/**
函数内得block
*/
void functionBlock(){
//函数内的代码块
void (^printMessage) (void)= ^(void) {
NSLog(@"this is block");
};
// 调用block
printMessage();
}
/**
修改外部变量的值
*/
void changb(){
__block int b =;
void (^changB) (void) = ^(void) {
NSLog(@"%i",b);
b =; //如果想要修改外部得变量得值,我们必须在变量得前面添加__block否则会报错,
NSLog(@"%i",b);
};
changB(); } int main(int argc, const char * argv[]) {
@autoreleasepool { // functionBlock();
// outerBlock();
// changA();
testPeronBlock();
// changb();
}
return ;
}
person.h
//
// Person.h
// Block
//
#import <Foundation/Foundation.h> @interface Person : NSObject
@property(atomic,retain) NSString * name;
-(void)say;
@end
Person.m
//
// Person.m
// Block
// #import "Person.h" @implementation Person // 第一个*号是nsstring的返回值,
NSString * (^myblock2)(NSString *) = ^(NSString * name){
NSLog(@"%@ say something",name);
return name;
};
//修改对象属性代码块
void (^changeName)(Person *) =^(Person * p){
p.name = @"张三";
};
-(void)say{
changeName(self);
myblock2(_name);
//方法内的代码块可以访问函数得属性
void (^inerProperty)(void) = ^(void) {
NSLog(@"访问内部属性NAME %@",self.name);
//内部block可以修改对象中的属性。但是函数中要特殊处理才能修改外部得变量
self.name = @"内部block修改name";
NSLog(@"%@",self.name);
};
inerProperty();
} @end
objective-c的代码块block的更多相关文章
- 04OC之分类Category,协议Protocol,Copy,代码块block
一.Protocol协议 我们都知道,在C#有个规范称之为接口,就是规范一系列的行为,事物.在C#中是使用Interface关键字来声明一个接口的,但是在OC中interface是用来声明类,所以用了 ...
- [转]iOS代码块Block
代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返回值,特殊地,Block还可以保存一段代码,在需要 ...
- iOS学习之代码块(Block)
代码块(Block) (1)主要作用:将一段代码保存起来,在需要的地方调用即可. (2)全局变量在代码块中的使用: 全局变量可以在代码块中使用,同时也可以被改变,代码片段如下: ;//注意:全局变量 ...
- 从C#到Objective-C,循序渐进学习苹果开发(4)--代码块(block)和错误异常处理的理解
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...
- Objective-C-----协议protocol,代码块block,分类category
概述 ObjC的语法主要基于smalltalk进行设计的,除了提供常规的面向对象特性外,还增加了很多其他特性,本文将重点介绍objective-C中一些常用的语法特性. 当然这些内容虽然和其他高级语言 ...
- 代码块(block)的使用
Objective-C语法之代码块(block)的使用 代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱 ...
- 一篇文章看懂iOS代码块Block
block.png iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返 ...
- Objective-C 代码块(block)的使用
代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定 ...
- Objective-C语法之代码块(block)的使用
代码块本质上是和其它变量相似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你能够像调用其它标准函数一样,传入參数数,并得到返回值. 脱字符(^)是块的语法标记.依照我们熟悉的參数语法规约所定 ...
- 代码块(Block)回调一般阐述
本章教程主要对代码块回调模式进行讲解,已经分析其他回调的各种优缺点和适合的使用场景. 代码块机制 Block变量类型 Block代码封装及调用 Block变量对普通变量作用域的影响 Block回调接口 ...
随机推荐
- Understanding Linux CPU Load - when should you be worried?
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
- BZOJ2002弹飞绵羊
动态树LCT模板题 #include<cstdio> #include<cctype> #include<algorithm> using namespace st ...
- windows上安装Ipython notebook
最近有一个培训机构找笔者来做一份Python的培训教材,顺带着研究了下python notebook,发现很好很强大,现把初步的安装步骤记录如下: 1.安装Python ...
- Direct2D教程(一)Direct2D已经来了,谁是GDI的终结者?
什么是Direct2D 一言以蔽之,就是Windows 7平台上的一个2D图形API,可以提供高性能,高质量的2D渲染.大多数人对Direct2D可能都比较陌生,以至于我之前在论坛上提到这个词的时候, ...
- ubuntu 卸载干净软件(包括配置文件)
var/cache/apt/archives occupying huge space I am in the process of cleaning up my system. And I see ...
- mySql 主从复制linux配置
总结: 主库(192.168.1.251): /etc/my.cnf.d/server.cnf [mysqld] log-bin=mysql-bin server-id=1 从库(192.168.1. ...
- js增加收藏
<html> <span style="white-space:pre"> </span><head> <span style ...
- BUCK电路工作原理
Buck电路,也称呼为DC_DC Buck型降压开关电源电路,这种电路结构实际应用也是很多的,电路拓扑结构看下图: 电路中,Q1是开关管,D1是续流二极管,L1就是问题中提到的这个电感器.C1就是问题 ...
- Windows 7 & Ubuntu 14.04完美双系统安装及系统引导配置----校园网Mentohust配置
本文写于完美安装双系统之后,所以图片会不全然.主要目的是总结下注意事项.备用. 一.Win7-64-旗舰版U盘安装 win7-64-旗舰版纯净版下载,下载安装后仅仅有1个驱动人生! 附刻盘工具激活工具 ...
- kubectl技巧之通过jsonpath截取属性
系列目录 前面一节我们介绍了使用go-template截取属性,go-template功能非常强大,可以定义变量,使用流程控制等,这是jsonpath所不具备的.然而,jsonpth使用的时候更为灵活 ...