Objective-C语言中的Block简介以及用法.

Block语法是在iOS4.0的SDK 中开始新增的, 在那时就已经有了超过400多个API使用了Block语法.

Block对象又同样是继承与NSObject, 是C语言级别的语法和运行时特性. 和标准的C函数指针类似. 但其除了可执行语句外, 还可以类似对象可以保持状态数据.

和C语言的函数指针类似, 但不完全相同. 常用来作为回调函数使用.

Block和函数的操作符对比:

函数指针使用的是 ‘*’

Block使用的是 ‘^’

下面是例子:

apple.h文件

#import <Foundation/Foundation.h>

@interface apple : NSObject

@property (nonatomic, copy) void (^shuiguo1)(void);  //定义一个Block, 且参数名为shuiguo1
@property (nonatomic, copy) void (^shuiguo2)(void);
@property (nonatomic, copy) void (^shuiguo3)(void);

- (void)shuiguo;

@end

apple.m文件

#import "apple.h"

@implementation apple

- (void)shuiguo
{
    if(_shuiguo1)  //判断_shuiguo1是否为0
    {
        NSLog(@"我是苹果");
    }
    if(_shuiguo2)
    {
        NSLog(@"我是香蕉");
    }
    if(_shuiguo3)
    {
        NSLog(@"我是橘子");
    }
}

@end

main函数

#import <Foundation/Foundation.h>
#import "apple.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        apple *app = [[apple alloc]init];  //创建一个app对象

        app.shuiguo1 = ^{    //打印一个shuiguo1的Bolck.
            NSLog(@"我是苹果");
        };
        app.shuiguo2 = ^{
            NSLog(@"我是香蕉");
        };
        app.shuiguo3 = ^{
            NSLog(@"我是橘子");
        };
        [app shuiguo];  //调用shuiguo的方法
    }
    return 0;
}
时间: 2024-11-10 09:33:57

Objective-C语言中的Block简介以及用法.的相关文章

GO语言中import的规则和用法

GO语言中引入包使用import,我将在本文讲解下规则和用法. 一些规则: 1.包中不能有main方法. 2.同文件夹中可以直接用方法名调用. 3.main函数建议放在package main里4.main不能调用同个目录下的其它文件中的方法. 5.还可以把包放在上级的目录中,如: /src/myFolder/foo/bar1.go #package foo /src/myFolder/foo/bar2.go #package foo /src/myFolder/foo/bar3.go #pac

IOS中 Block简介与用法(一)

?Block简介: Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值.Block实体形式如下: ^(传入参数列){行为主体}; Block实体开头是"^",接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal.行为主体可以用return回传值,类型会被compiler自动辨别.如果没有参数列要写成: ^(void). 例如下面的一个例子: [cpp] vi

Objective C语言中nil、Nil、NULL、NSNull的区别

以下内容是基于搜集整理的网上资料,供参考. nil:指向Objective C语言中对象的空指针,其定义值为(id)0. Nil:指向Objective C语言中类(Class)的空指针,其定义值为(Class)0. NULL:指向C语言中的标准空指针,其定义值为(void *)0. NSNull:在Objective C语言的集合对象中,表示空值的对象,其定义值为[NSNull null].[NSNull null]是一个对象,用在不能使用nil的场合. 因为在NSArray和NSDictio

[原创]c语言中const与指针的用法

最近一直在准备笔试,补补大一大二欠下的课.复习c语言时碰见这么个题: 1 2 3 4 5 int a=248, b=4; int const c=21; const int *d=&a;  int *const e=&b; int const * const f =&a;  请问下列表达式哪些会被编译器禁止? A:*c=32 B:*d=43 C:e=&a D:f=0x321f E:d=&b F:*e=34 下面逐条分析第一行代码不提, 第二行,int const c

C语言中 v...printf类函数的用法

C语言的自学渐渐接近尾声,今天学到了标准库中的stdarg.h头,里面关联了stdio.h头里面的一类函数:v...printf函数,里面举的例子看了之后还是不太明白,google了一下依旧不是很懂,所以自行测试了一下,以下是过程: 这一类函数书中列举了四个,原型分别有: int vfprintf(FILE *restrict stream, const char * restrict format, va_list arg); int vprintf(const char * restrict

C语言中mktime函数功能及用法

今天联系写一个日历的程序,需要算出月份中的第一天是星期几,用到了mktime()这个函数,感觉这个函数挺有用的,分享给大家. 原型:time_t mktime(struct tm *) 其中的tm结构体定义如下: struct tm { int tm_sec; /* 秒 – 取值区间为[0,59] */ int tm_min; /* 分 - 取值区间为[0,59] */ int tm_hour; /* 时 - 取值区间为[0,23] */ int tm_mday; /* 一个月中的日期 - 取值

C语言中的strstr函数的用法

strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地址:否则,返回NULL. PHP语言函数 编辑 strstr() 函数搜索一个字符串在另一个字符串中的第一次出现. 该函数返回字符串的其余部分(从匹配点).如果未找到所搜索的字符串,则返回 false. 语法 1 strstr(string,search) [1] 参数 描述 string 必需.规定被搜索的字符串. search 必需.规定所搜索的字符串. 提

IOS Block简介,参考自官方文档

一.block 介绍 block 是c语言层次的语句,c中的方法比较相似.在一些其他的语言中,block 有时也被称为"closure"(闭包). 她可以被声明为指针变量,作为参数传递以供回调,在异步调用上也非常方便: block 是一种匿名内联的代码集合,文档上罗列了她的一些功能: 1.有如方法一样的参数列表 2.有返回类型 3.可以在其声明时所在的作用域中占有状态 4.可以在其作用域中选择性的更改状态 5.可以与相同作用域中的其他代码块分享变动的可能性 6.尽管其(栈)作用域被销毁

Java语言中String累的总结

String类 1.Java.lang包简介 java.lang包是java内置的一个基础包,其中包含了一系列程序中经常要用到的类: 在默认情况下,每个java程序都会自动导入该包,因此无需在程序中显式地声明. 2.String类 Java语言中,字符串是String类的对象: Java语言中,String是引用数据类型: 可以通过使用String类提供的方法来完成对字符串的操作: 创建一个字符串对象之后,将不能更改构成字符串的字符: 每当更改了字符串版本时,就创建了一个新的字符串对象,并在其内