一、回调函数:
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实例。
本文发布于:2024-01-30 06:19:09,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170656675219837.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |