OC6-block-函数指针

目标: 1.通过类中的方法进行排序

2block-函数指针,

3.通过block实现数组的排序

1.自定义类在数组中的排序:

(1)在自定义类中声明实现一个方法,方法的返回值是bool类型,意思是是否进行元素的交换

(2)在main中调用这个方法

(3)在数组中,@selecter 是方法选择器,在指定的对象中,寻找指定的方法。

返回值是布尔类型,判断是否交换,必须有且只有一个参数。

参数的类型是自身类型,参数的代表的是它在数组中的下一个元素。

//    [arr1 sortedArrayUsingSelector:@selector(compare:)];

2.block:

(1)匿名函数:

(2)标c没有block,是后续的版本扩展才有的。

(3) block的一个特定就是灵活性。block允许在函数中写一个代码段,类似声明一个函数。

block块,很多的语言里面都有,oc也加上了,在个别领域使用较多,block的用法和函数指针相似,

回顾函数指针:具有特定功能的代码块,返回值,函数名,参数列表,匿名函数,只有返回值和参数列表,

函数指针的返回值是int ,函数指针的名字是p,(*)是标志着p是一个函数指针,函数指针的参数列表是(int,int);

3.block的语法

block的声明:int (^b)(int,int) = ^ int (int a int b){ return 1;};

void (^b1)(int int) = ^ void (int a,int b){ [email protected](@"jfdhjf ");};

int (^b2)() = ^int () { return 13;};

4.block与作用域。 4.block的调用

block中允许写一代码段,类似声明一个函数,在使用中有可能设计变量的作用域,(全局,局部)。

(1).block中是可以随意修改全局变量的,没有任何影响,但是不安全。

(2)默认的局部变量在block中受保护,不能修改,若要修改,需在局部变量类型修饰符前添加‘__block’。两个下划线。

6.对block 别名定义:typedef int (^MYBLOCK)(int ,int );

7.数组排序和block。

(1)系统自带的。

(2)自定义的排序:

//    NSMutableArray *[email protected][@"123",@"234",@"244",@"108",@"118"].mutableCopy;

//    [a1 sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {

//        if ([obj1 intValue] >[obj2 intValue]) {

//            return YES;

//        }

//        else return NO;

//    }];

8.字面量

(1)字典的字面量--NSMutableDictionary [email protected]{@"key1":@"value1",@"key2":@"value2"};

(2)数组的字面量--NSArray [email protected][@"zhangsan",@"lisi",@"wangwu",@"zhaolu"];

(3)字符串的字面量---[email protected]"this is a sting";

(4)NSNumber的字面量-- NSNumber *num=[NSNumber alloc]initwithInt:12 ]  >>>>[email protected](12)

(5)一个符号多个意义,

9.[]的作用:

1)是数字的字面量,

2)数组的访问语法糖,

3)是字典的访问语法糖

4)对象调用方法的标志。

时间: 2024-10-27 13:55:07

OC6-block-函数指针的相关文章

新手,对函数,函数指针,回调函数, 函数指针作为函数的返回值和block的一些见解

很多初学者,学c语言时,看到函数都觉得难,我也是,一开始觉得函数太难了,后来慢慢就理解了 第一:函数 在c语言中最简单的函数一般有四种: 1, 无返回值, 无参数. 2, 无返回值,有参数. 3, 有返回值,无参数. 4, 有返回值,有参数 1, 无返无参  定义方式:      void 函数名(); 一般不怎么用这种形式的函数,可用来输出,打印 void functionOne() { printf("无返回值,无参数"); // 没有返回值不能写return } int main

Objective-C Block与函数指针比较

相似点 1.函数指针和Block都可以实现回调的操作,声明上也很相似,实现上都可以看成是一个代码片段. 2.函数指针类型和Block类型都可以作为变量和函数参数的类型.(typedef定义别名之后,这个别名就是一个类型) 不同点 1.函数指针只能指向预先定义好的函数代码块(可以是其他文件里面定义,通过函数参数动态传入的),函数地址是在编译链接时就已经确定好的. 2.Block本质是Objective-C对象,是NSObject的子类,可以接收消息. 3.函数里面只能访问全局变量,而Block代码

Swift的函数与函数指针、闭包Closure等相关内容介绍

<span style="font-size:24px;">//函数 //demo1 无參数类型 func testConcat(){ println("測试函数"); } testConcat()//调用demo1 //demo2 多參数,一个返回值 /* 函数以func开头,表示一个函数 v1表示參数.String參数类型 ->返回值类型String */ func testConcats(v1:String,v2:String) ->S

objc反汇编分析,block函数块为何物?

上一篇向大家介绍了__block变量的反汇编和它的伪代码,本篇函数块block,通常定义成原型(^){},它在反汇编中是什么东西. 我们先定义将要反汇编的例子,为减少篇幅例子采用non-arc环境. NSString* a = @"abc"; NSString* b = [NSString stringWithUTF8String:"abc"]; NSString* c = [@"ab" stringByAppendingString:@&quo

Objective-C:自定义Block函数

Block函数是一种类似于函数指针的函数,程序员只需要把需要操作的代码封装到定义的block中即可,以后需要使用时,直接调用,非常方便.... 举例如下: 自定义一个无参数的block #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //第一种形式:自定义无参数的block函数类型 typedef void (^FirstBlock)(void); //

Python Cookbook(第3版)中文版:15.12 将函数指针转换为可调用对象

15.12 将函数指针转换为可调用对象? 问题? 你已经获得了一个被编译函数的内存地址,想将它转换成一个Python可调用对象,这样的话你就可以将它作为一个扩展函数使用了. 解决方案? ctypes 模块可被用来创建包装任意内存地址的Python可调用对象.下面的例子演示了怎样获取C函数的原始.底层地址,以及如何将其转换为一个可调用对象: >>> import ctypes >>> lib = ctypes.cdll.LoadLibrary(None) >>

单继承与多继承中的虚函数表和虚函数指针

首先,我们了解一下何为单继承,何为多继承?? 单继承:一个子类只有一个直接父类. 多继承:一个子类有两个或多个直接父类. 单继承中的虚函数表分析: 示例程序: #include <iostream> using namespace std; typedef void(*FUNC)(); class Base { public: virtual void func1() { cout << "Base::func1()" << endl; } virt

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

恼人的函数指针(一)

原文链接:http://www.cnblogs.com/AnnieKim/archive/2011/11/20/2255813.html 这篇是为了加深记忆所写.发现,很多知识若不经过反复的琢磨和动手实践,是很难记得住的. 1)  函数指针的初始化. 函数如下: int CompareString(const string& str1, const string& str2) { return str1.compare(str2); } 函数的初始化有两种方式: 第一种,也是最普遍的方式: