一、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的更多相关文章

  1. 04OC之分类Category,协议Protocol,Copy,代码块block

    一.Protocol协议 我们都知道,在C#有个规范称之为接口,就是规范一系列的行为,事物.在C#中是使用Interface关键字来声明一个接口的,但是在OC中interface是用来声明类,所以用了 ...

  2. [转]iOS代码块Block

    代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返回值,特殊地,Block还可以保存一段代码,在需要 ...

  3. iOS学习之代码块(Block)

    代码块(Block) (1)主要作用:将一段代码保存起来,在需要的地方调用即可. (2)全局变量在代码块中的使用: 全局变量可以在代码块中使用,同时也可以被改变,代码片段如下: ;//注意:全局变量 ...

  4. 从C#到Objective-C,循序渐进学习苹果开发(4)--代码块(block)和错误异常处理的理解

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...

  5. Objective-C-----协议protocol,代码块block,分类category

    概述 ObjC的语法主要基于smalltalk进行设计的,除了提供常规的面向对象特性外,还增加了很多其他特性,本文将重点介绍objective-C中一些常用的语法特性. 当然这些内容虽然和其他高级语言 ...

  6. 代码块(block)的使用

    Objective-C语法之代码块(block)的使用 代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱 ...

  7. 一篇文章看懂iOS代码块Block

    block.png iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返 ...

  8. Objective-C 代码块(block)的使用

    代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定 ...

  9. Objective-C语法之代码块(block)的使用

    代码块本质上是和其它变量相似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你能够像调用其它标准函数一样,传入參数数,并得到返回值. 脱字符(^)是块的语法标记.依照我们熟悉的參数语法规约所定 ...

  10. 代码块(Block)回调一般阐述

    本章教程主要对代码块回调模式进行讲解,已经分析其他回调的各种优缺点和适合的使用场景. 代码块机制 Block变量类型 Block代码封装及调用 Block变量对普通变量作用域的影响 Block回调接口 ...

随机推荐

  1. 基于现有图像数据创建自定义像素格式的 BufferedImage

    在最近的一个项目中,需要实现 Mac OS X 环境下的摄像头图像实时捕获并转换为 Java 中的 BufferedImage 对象.首先通过开发一个本地库实现 Mac OS X 的摄像头图像捕获,采 ...

  2. 使用redis-stat来监控redis实例

    https://blog.csdn.net/xiao_jun_0820/article/details/78189576 https://blog.csdn.net/u010022051/articl ...

  3. React-Native Navigator 过渡动画卡顿的解决方案

    在RN0.44版本之前,路由导航跳转几乎是使用的是Navigator组件,在0.44版本以后就不推荐使用了,官方推荐的是react-navigation,当然还是可以在废弃的库中找到: import ...

  4. 常用函数和STL

    #include <bits/stdc++.h> using namespace std; #define PI acos(-1.0) int main() { printf(" ...

  5. 2017 CCPC 哈尔滨站 题解

    题目链接  2017 CCPC Harbin Problem A Problem B Problem D Problem F Problem L 考虑二分答案. 设当前待验证的答案为x 我们可以把第二 ...

  6. 【WEB基础】HTML & CSS 基础入门(7)表格

    表格的基本结构 表格是网页上最常见的元素,它除了可以用来展示数据,还常常被用来排版.虽然现在提倡使用DIV+CSS完成页面布局,但表格框架简单明了,对于繁杂的数据,一个简洁的表格能让其展现的极有条理. ...

  7. Skiing(最短路)

    poj——3037 Skiing Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4921   Accepted: 1315 ...

  8. 会话跟踪技术Cookieless

    会话跟踪技术Cookieless   在Web应用中,通常使用Cookie记录用户的状态,如用户名.访问时间等信息.当进行HTTP请求的时候,会自动发送Cookie信息给服务器.服务器接收到,就可以判 ...

  9. UVA - 10615 Rooks

    建一下模,把行和列看成二分图的点,把车看成是二分图中的边,这样就变成了上一个博客的问题. 我们每次新加一条边,就把它加入一条 这条边两端点最小没有出现的颜色  交替出现的路径中去. #include& ...

  10. Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)

    相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处 ...