ios中的代理与回调函数

一、回调函数:

class A

{

f1();

f2();

B *b;//A中定义B的对象为成员变量

}

A:f1()

{

b->f3(&f2);//调用B中的函数f3,并把f2的地传给B;

}


class B

{

void* func;

f3();

f4();

}

B:f3()

{

func = &f2;//B中保存A中传过来的f2的地址;

}

当函数f4被调用时:

f4()

{

func();//回调执行A中的f2;

}

二、利用回调函数代替ios中的代理机制

1、以有http请求为例,DataSource类中有http成员变量,http实现对网络的访问,同时DataSource是http的代理,实现requestFinish和requestFaild代理函数。DataSource对外提供了一个接口函数PA_first.

在Controler类中,定义DataSource对象成员变量ds.并定义了从DataSource中提取http返回的数据的函数loadData,实现了取得http返回的数据,并且显示。我们不能直接调用loadData拿数据,因为我们不知道http是否已返回数据,因此,可利用回调函数机制为:

ds.PA_first(&loadData)

在DataSource中:PA_first()

{

保存loadData函数地址。

}

在DataSource中,当http返回成功时,会调用requestFinish,在requestFinish中回调执行loadData函数提取数据,并显示数据。

2、通过ios代理实现:

Controler是DataSource的代理,DataSource是Http的代理,因此,当http返回时,会执行DataSource中的代理函数,时而会执行Controller中的代理函数,取得数据,展现。


三、cllocationmanager利用GPS取得当前位置的经度和纬度信息,但在模拟器上,startUpdatingLocation也是不能更新到用户当前位置的,而是一直更新到旧金山的某个位置。利用cllocationmanager取得的用户当前位置不如MKmapView取得的用户当前位置准确,因此,当有map存在时,最好用map提供的位置信息。利用MKReverseGeocoder可以由经度和纬度反编译出名称信息。同一时刻只能存在一个MKReverseGeocoder实例。


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值