一、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. Powershell简介及其编程访问

    Powershell是下一代的命令行外壳程序,较之于它的前身(cmd.exe),它的功能更加强大,也更加易用.最根本的区别在于它是基于对象的操作(基于.NET Framework),而不是基于字符串的 ...

  2. sed理论讲解、实战

    1.Sed是操作.过滤和转换文本内容的强大工具,常用功能有增删改查.过滤.取行. options(常用参数): -n:使用安静(silent)模式,在一般 sed 的用法中,所有来自 STDIN 的数 ...

  3. js和jquery 实现网站来消息网站标题闪动提示

    js版 <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"&g ...

  4. Zen of Python(Python的19条哲学)

    The Zen of Python Beautiful is better than ugly. Explicit is better than implicit. Simple is better ...

  5. Java代理学习笔记

    代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关 ...

  6. Proftpd快速搭建FTP服务器

    前言 在Linux系统中,FTP服务器软件有很多,都已经成熟,像vsftpd, wu-ftp, Pure-FTPd等.但这些软件安装配置起来都比较麻烦,搭建个人的FTP服务器,还是Proftpd比较简 ...

  7. Win7安装软件,界面上中文显示乱码的解决方案

    “Control panel”->"Clock,Language and Region"->"Region and Language"->第四 ...

  8. 使用Cout输出String和CString对象

    CString和string都是一个类,不同的是CString主要用于MFC或者是ATL编程中,而string则多用于Windows控制台编程中 在实际编程过程中,我们经常用到string或者是CSt ...

  9. react 路由传参

    今天,我们要讨论的是react router中Link传值的三种表现形式.分别为通过通配符传参.query传参和state传参. ps:进入正题前,先说明一下,以下的所有内容都是在react-rout ...

  10. OA权限树搭建 代码

    <ul id="tree"> <s:iterator value="#application.topPrivilegeList"> &l ...