很抱歉这是一个基本问题,我想知道为什么我的代码不需要mapView的alloc / init。它会在保留时自动发生吗?我没有使用ARC和我的MKMapView * mapView的alloc / init它不会导致错误,但地图视图不会显示位置信息,也不会显示为混合类型....但是在删除alloc时来自viewDidLoad的/ init语句一切正常!为什么?
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
@interface MDViewController : UIViewController<CLLocationManagerDelegate, MKMapViewDelegate>
@property (retain, nonatomic) IBOutlet MKMapView* mapView;
@end
-----
#import "MDViewController.h"
@interface MDViewController ()
{
CLLocationManager* lmanager;
}
@end
@implementation MDViewController
@synthesize mapView;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
lmanager= [[CLLocationManager alloc]init];
lmanager.delegate=self;
lmanager.desiredAccuracy=kCLLocationAccuracyBest;
lmanager.distanceFilter=kCLDistanceFilterNone;
[lmanager startUpdatingLocation];
//mapView = [[MKMapView alloc]init];//without allocating here it works
mapView.delegate=self;
mapView.mapType=MKMapTypeHybrid;
}
-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
//update map
MKCoordinateSpan span;
span.latitudeDelta= .001;
span.longitudeDelta=.001;
MKCoordinateRegion region;
region.center= newLocation.coordinate;
region.span=span;
[mapView setRegion:region animated:YES];
[mapView setShowsUserLocation:YES];
}
答案 0 :(得分:1)
您不需要为您的mapview分配init,因为它是由Xib为您完成的。在加载接口xib时,框架会看到你有一个冻结的mapview并自动地为它分配init,然后将mapview分配给你的viewcontroller代码中的mapview。 如果在你的代码中你分配了init,你就会打破两者之间的联系。
使其工作的一种方法是在IB xib中没有mapview并分配init it,setDelegate,设置框架,最后将其视图添加为主视图的子视图。
我尽量保持简洁。我希望你们清楚。 ARC与这一切毫无关系。