本篇文章给大家分享的是有关怎么在iOS中实现一个模拟定位功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强> 1,运行时纵酒强>
因为业务代码是根据- (void) locationManager: (CLLocationManager *)经理,didUpdateLocations:(NSArray 优点:便于理解。 缺点:需要遍历所有的类和类的方法列表。 <强> 2,中间代理对象 这种思路是狂饮了CLLocationManager的setDelegate:方法,当调用setDelegate时,将真实的委托对象保存下来,再将我们定义的中间代理类纵酒委托对象设置为CLLocationManager的委托,这样当系统回调CLLocationManagerDelegate,会先回调到中间代理类纵酒委托中,再由纵酒委托将事件传递到真实的委托对象。 优点:相对于第一种方法,不需要遍历类和类的方法列表,只需纵酒CLLocationManager中的setDelegate:方法即可。 缺点:在中间代理类纵酒委托中需要实现全部的CLLocationManagerDelegate方法,如果后续增加代理方法,仍需要修改这个类。 <强> 3,采用NSProxy实现中间代理对象 objective - c中有2个基类,常用的就是NSObject,另一个就是NSProxy, NSProxy主要用于消息转发处理,所以采用NSProxy我们可以更好的处理方法二中的缺点。 3.1创建一个新的类MockLocationProxy,集成自NSProxy。 接着就来处理消息转发的逻辑,首先我们要知道我们想要的是什么效果,系统回调给MockLocationProxy, MockLocationProxy只处理locationManager: didUpdateLocations:,其他的消息都仍然交给原目标。 所以我们在MockLocationProxy。米中添加以下方法: 当消息发送给MockLocationProxy时,判断当前方法是否是locationManager: didUpdateLocations:,如果是,则MockLocationProxy响应事件,否则直接传递给原本的目标。到此已经可以随时处理模拟定位。你只需要在模拟定位的代码做一些处理,就可以随时修改定位。 <李>
强> <李>
强>
//, MockLocationProxy.h
# import & lt; CoreLocation/CoreLocation.h>
@interface MockLocationProxy : NSProxy
@property (原子,弱,,只读的,,可以为空),id & lt; CLLocationManagerDelegate>,目标;
安康;(instancetype) initWithTarget: id & lt; CLLocationManagerDelegate>目标;
@end
//, MockLocationProxy.m
# import “MockLocationProxy.h"
@implementation MockLocationProxy
安康;(instancetype) initWithTarget: (id
//, MockLocationProxy.m
@implementation MockLocationProxy
安康;(instancetype) initWithTarget: (id
怎么在iOS中实现一个模拟定位功能