ARC 与 MRC 下使用 CLLocationManager 定位注意事项
来源:互联网 发布:osi网络七层协议 编辑:程序博客网 时间:2024/04/30 15:11
最近碰到几个朋友问一个关于定位的问题,他们发现很奇怪,在MRC下定位正常,但是在ARC下定位无效,抽空做了一番测试,分享出来,供大家参考,具体代码如下:
一,MRC 情况
1,创建定位对象,在viewDidLoad
CLLocationManager *manager = [[CLLocationManager alloc] init]; manager.desiredAccuracy = kCLLocationAccuracyBest; manager.distanceFilter = 5; manager.delegate = self; [manager startUpdatingLocation];
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ CLLocation* location = [locations lastObject]; CLLocationCoordinate2D coordinate = location.coordinate; MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1); MKCoordinateRegion region = MKCoordinateRegionMake(coordinate, span); [self.myMap setRegion:region animated:YES];}
3,在模拟器下菜单Debug->Location->Apple 即可定位成功;
4,特别注意,在MRC下我们要遵循黄金法则,但是我们的对象manager没有释放,也没有自动释放,如果加了
[manager autorelease];再次运行,发现无法再定位;
二,ARC 情况
具体代码与MRC一样,但是却无法定位,好比加了 自动释放
故而建议将此变量manager 写成全局变量,代码
@interface ViewController ()<CLLocationManagerDelegate>{ CLLocationManager *manager;}
继续在MRC下,运行,代码改为
manager = [[CLLocationManager alloc] init];
定位正常。
将工程转为ARC模式下,运行,也成功。
三,结合MRC和ARC,建议将此定位变量写成属性形式,即可定位均成功;
@property (nonatomic,strong) CLLocationManager *manager;
四,结论
MRC下写成局部变量,虽然能定位成功,但是却存在内存泄露的问题,在ARC下如果写成局部变量,虽然没有内存泄露,但是编译器却认为该变量在viewDidLoad 执行完成后可以抛弃,因为代理方法需要一段时间去执行,所以造成无法定位的奇怪现象,对于ARC,一定要注意RunLoop的每一次执行直接影响着AutoreleasePool的Drain,所以在ARC中,我们尽量用属性来修饰变量,以免一些内存不必要的提前释放,造成后续信息无法发送给对象,造成程序奔溃。
1 0
- ARC 与 MRC 下使用 CLLocationManager 定位注意事项
- arc下使用mrc
- ARC与MRC使用总结
- 使用CLLocationManager简单定位
- ARC与MRC转换
- ARC与MRC
- ARC与MRC混编
- OC ARC与MRC
- ARC 与 MRC 混编
- ARC 与 MRC 混编
- ARC与MRC
- ARC与MRC下setter方法的区别
- block的理解与 MRC,ARC下内存管理
- iOS 在ARC模式下使用MRC的类
- iOS 在ARC模式下使用MRC的工程
- iOS 如何在ARC下 使用MRC的类库
- MRC和ARC下使用block的循环引用问题
- ARC和MRC下Block的使用注意
- Spring学习(第二篇)——自己动手模拟spring的IOC
- 程序员看数据分析
- 7.使用while循环,计算2+4+6+...+100
- Ubuntu12.04LTS 上安装 opencv 2.4.2+ffmpeg0.11.1
- Java中替换HTML标签的方法
- ARC 与 MRC 下使用 CLLocationManager 定位注意事项
- unix域套接字
- windows 下搭建django
- Log4j入门
- 黑马程序员——加载器
- Java 常用功能三--解析XML
- 好久没有博客啦
- python基础教程第十一章学习笔记
- 在Java Web项目中建src/main/java包