@PEND
2020-04-13T09:20:52.000000Z
字数 29914
阅读 470
代码面试题
考察代码风格
除了各式还有别的什么问题吗?
//// BaseViewController.m////// Created by A on 11-3-15.// Copyright 2011 Company. All rights reserved.//import "BaseViewController.h"import "AppDelegate.h"import "FavoriteDataManager.h"import "ReversePointDataManager.h"import "SoftwareVersionManager.h"import "BadgeChainManager.h"import "CalloutView.h"import "MiniCalloutView.h"import "UserOpDataManager.h"import "OfflineMapDataManager.h"import "FavoriteViewController.h"import "ConfigDataManager+OperationSystem.h"import "StreetViewController.h"import "StreetviewConfigDataManager.h"import "UIAlertView+Swizzle.h"import "IBaseViewStatusBarStyleProtocol.h"import "PersonalInfoManager.h"import "OfflineModeManager.h"import "OfflineModeNetworkNotifyView.h"import "LocalPOISearcher.h"import "TrafficRestrictionController.h"import "OperationFloatView.h"import "SignInH5ViewController.h"import "UIViewController+ForcePortait.h"import "SkinDataManager.h"import "MapViewFactory.h"import "IndoorViewController.h"import "CloseRoadDataFetcher.h"import "OfflineMapViewController.h"import "ActionSheet.h"import "HomeWorkOverlay.h"import "HomeWorkIconOverlay.h"import "MySummaryViewController.h"import "LanguagePackageViewController.h"import "KingCardManager.h"import "ThemePackageManager.h"import "PoiOperationOverlay.h"import "POISearchViewController.h"import "PoiAnnotationPickerViewController.h"import "PoiSearBarBaseView.h"import "BaseBottomView.h"import "RouteReqParam.h"import "RouteViewController.h"import "RouteSearchDefine.h"import "PoiFullScreenWebViewController.h"import "PoiAssociationView.h"import "VCUpBottomMoveInOutTransition.h"import "ViewController+Transition.h"import "MapFloatLayerPanelView.h"import "CarVioVcContainer.h"import "UIUitl.h"import <SDWebImage/SDWebImage.h>import "BaseOpenApiManager.h"import "RouteNavigationDataManager.h"import "DriveNaviViewController.h"import "BBPlistFileAccessor.h"import "NearbyRecommendH5ViewController.h"import "UgcReportEventDataManager.h"import "UgcReportRecordDataManager.h"import "UgcReportViewController.h"import "UIViewController+BBHalfScreen.h"import "BBUgcReportRecordsViewController.h"import "BBVoiceAssistantManager+Carplay.h"import "BBAttentionRealTimeBusManager.h"import "BBLottieZipDataManager.h"import "BBPersonCenterViewController.h"import "RouteUtillity.h"import "BBLottieBanner.h"import "BBSearchVCTransition.h"import "BBVoiceIntroduceView.h"import "BBVoiceNoticeTips.h"import "BBBusQRCodeModelManager.h"import "BBVoiceEmitterView.h"import "BBRegularBusDataManager.h"import "BBCommuteDataManager.h"import "CombineOfflineMapDataManager.h"import "BaseViewController+BBOpeningAnimation.h"import "CommuteConfirmViewController.h"import "CommutePopViewController.h"import "HistoryDataManager.h"import "FullTimeDriverChoiceView.h"import "FullTimeDriverManager.h"import "NaviSettingLocalStore.h"import "CommuteTool.h"import "AdvSplashManager.h"import "FloatLayerThemeDataManager.h"import "THMWeatherAnimationView.h"import "MainPageTipView.h"import "HomepageWeatherDataManager.h"import "ConfigDataManager+ThemeMap.h"import "TMHomapageWeatherInfo.h"import "BaseViewLocationReport.h"import "RealTimeBusHomeModule.h"import "RealTimeBusDataManager.h"import "AccumWaterHippyViewController.h"import "Device+Business.h"import "BusActivityReportManager.h"import "MainLocationButton.h"import "SystemPrivacyManager.h"import <LocationKit/LocationManager+AuthorizationStatus.h>import "AccountAuthPopupViewController.h"import <WeChatSDK/WXApi.h>import "AdvSplashViewController.h"define TABLEBAR_HEIGHT (([UIScreen mainScreen].bounds.size.height == 736)?54:48)define MAPFLOATLAYERTAG 8888define kSearchBarLeft (14)define kAssociationTop (kNavigationBarHeight + (IS_IPHONE_6P ? 5 : 5.5))//#define TEST_TTS_YYBNSString *const ThemeCityNameInApp = @"ThemeCityName";static CGFloat leftMargin = 6.5f;static BOOL isShowHomeWork = NO;static BOOL isAccumWaterTipsDidRequest = NO;static NSInteger maxRealtimeLocationReportCount = 5;NSMutableDictionary *splitURL(NSURL *url){NSScanner *scanner = [NSScanner scannerWithString:url.absoluteString];[scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"&?/"]];[scanner scanUpToString:@"?" intoString:nil]; //ignore the beginning of the string and skip to the varsNSMutableDictionary *dictionary = [NSMutableDictionary dictionary];NSString *tempString;while ([scanner scanUpToString:@"&" intoString:&tempString]){NSArray *keyValuePair = [tempString componentsSeparatedByString:@"="];if ([keyValuePair count] == 2){NSString *key = [[keyValuePair objectAtIndex:0] stringByRemovingPercentEncoding];NSString *val = [[keyValuePair objectAtIndex:1] stringByRemovingPercentEncoding];if (key != nil && val != nil){[dictionary setValue:val forKey:key];}}}return dictionary;}BMapRect BMapRectMakeFromNSStringWithType(NSString *str) {if (!NSStringIsNotEmpty(str)) {return BMapRectMake(0, 0, 0, 0);}NSArray *components = [str componentsSeparatedByString:@","];if (components.count != 4) {return BMapRectMake(0, 0, 0, 0);}CLLocationCoordinate2D blCornor = CLLocationCoordinate2DMake([[components objectAtIndex:0] doubleValue], [[components objectAtIndex:1] doubleValue]);CLLocationCoordinate2D trCornor = CLLocationCoordinate2DMake([[components objectAtIndex:2] doubleValue], [[components objectAtIndex:3] doubleValue]);int blx = [CoordinateTransformer serverToClientX:[CoordinateTransformer longitudeToServerX:blCornor.longitude]];int bly = [CoordinateTransformer serverToClientY:[CoordinateTransformer latitudeToServerY:blCornor.latitude]];int trx = [CoordinateTransformer serverToClientX:[CoordinateTransformer longitudeToServerX:trCornor.longitude]];int rty = [CoordinateTransformer serverToClientY:[CoordinateTransformer latitudeToServerY:trCornor.latitude]];return BMapRectMake(blx, rty, trx-blx, bly-rty);}BMapPoint BMapPointMakeFromNSStringWithType(NSString *str) {NSArray *components = [str componentsSeparatedByString:@","];if(components.count != 2){return BMapPointMake(0, 0);}int x = 0;int y = 0;CLLocationCoordinate2D coor = CLLocationCoordinate2DMake([[components objectAtIndex:0] doubleValue], [[components objectAtIndex:1] doubleValue]);x = [CoordinateTransformer serverToClientX:[CoordinateTransformer longitudeToServerX:coor.longitude]];y = [CoordinateTransformer serverToClientY:[CoordinateTransformer latitudeToServerY:coor.latitude]];return BMapPointMake(x, y);}@interface BaseViewController()<UIGestureRecognizerDelegate,IBaseViewStatusBarStyleProtocol,OfflineModeNotifyViewDelegate,LoginDelegate,LocationDelegate,PoiAnnotationPickerViewControllerDelegate,PoiAssociationViewDelegate,MapFloatLayerPanelViewDelegate,LottieBannerDelegate,UgcReportUIDelegate,MainPageTipViewDelegate,VoiceAssistantPanelViewDelegate,HomeWorkOverlayDelegate,CommuteDataManagerDelegate,CommuteConfirmViewControllerDelegate,CommutePopViewControllerDelegate,RouteEditViewControllerDelegate,TestFlightPopupViewControllerDelegate,HomepageWeatherDelegate,MWeatherAnimationViewDelegate,RealTimeBusHomeModuleDelegate,CloudControlQueryResultDelegate,VoiceAssistantPanelViewDelegate>{BOOL _isOpeningOfStreetView;BOOL isViewDidAppear_;BOOL longpressViewShow;BOOL _hadFetchHolidayInfo;dispatch_source_t nearbyHomePageTimer;BMapPoint lastNearbyPoint;BOOL _hideAssositeView;FavoriteOverlay *favoriteOverlay_;}@property (nonatomic, strong) MainPageTipView *mainPageTipView;@property (nonatomic, copy) void(^streetViewPresenterBlock)();@property (nonatomic) BOOL isReviewAlertPoped;@property (nullable, nonatomic, weak) AlertController *mapNotifyAlert;@property (nonatomic, assign) BMapPoint previousCenter;@property (nonatomic, strong) OperationFloatView *signInAlertView;@property (nonatomic, strong) PoiSearBarBaseView *searchBarBaseView;@property (nonatomic, strong) PoiAnnotationPickerViewController *poiAnnotationPickerViewController;@property (nonatomic, strong) BaseBottomView *mBottomBarView;@property (nonatomic, strong) PoiAssociationView *associationView;@property (nonatomic, strong) LottieBanner *lottieBannerView;@property (nonatomic, assign) NSInteger currentZoomLevel;@property (nonatomic, weak) VoiceIntroduceView *voiceIntroduceView;@property (nonatomic, weak) VoiceNoticeTips *voiceNoticeTips;@property (nonatomic, weak) TestFlightPopupViewController *testFlightPopupVC;@property (nonatomic, weak) AccountAuthPopupViewController *accountAuthPopupViewController;@property (nonatomic, weak) AlertController *continueNavigationAlert;@property (nonatomic, strong) BaseViewLocationReport *locationReport;@property (nonatomic, strong) WeatherAnimationView *weatherAnimationView;@property (nonatomic, strong) HomepageWeatherDataManager *weatherDataManager;@property (nonatomic, strong) RealTimeBusHomeModule *realtimeBusHomeModule;@property (nonatomic, assign) BOOL isFullViewMode;@property (nonatomic, assign) CGRect searchBarFrame;@property (nonatomic, assign) CGRect bottomBarFrame;@property (nonatomic, assign) CGFloat realtimeBusLocationLogTime;@property (nonatomic, assign) BOOL alreadyShownLocationAlertOnForeground;@end@implementation BaseViewController@synthesize streetViewPresenterBlock = _streetViewPresenterBlock;@synthesize isStatusBarHidden;(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(handleWipeUpSearchResult:)name:WipeUpSearchResultNotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(handleWipeUpAllAnnotations:)name:WipeUpAllAnnotationsNotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(handleFocusAnnotation:)name:FocusAnnotationNotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(handleStartStreetviewFromPOIAnnotation:)name:BaseStartStreetviewControllerFromPOINotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(handleShowMyLocation:)name:ShowMyLocationNotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(showFirstUseAlert:)name:ShowFirstUseAlertobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(onIntroductionViewWillDisappear)name:IntroductionViewWillDisappearNotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(mapUseLeftHandChangeNotification:)name:pUseLeftHandChangeNotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(clearUI)name:SetBaseViewModeNotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleShowEventReportCard:) name:kBBNotifcationEventReportCardShowed object:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cancelShowReviewAlert) name:BBBaseCancelShowReviewAlertNotification object:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOfflineModeCange:) name:KOfflineModeSettingsChangeNotification object:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMapResourceUpdate:) name:BBMapResourceUpdateNotification object:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleBBCloseOtherUINotification:) name:BBCloseOtherUINotification object:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netStateChangedNotification) name:BBNetworkStatusChangedNotification object:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleFollowMiniCardUpdate:) name:BBFollowMiniCardUpdateNotification object:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(handleWillEnterForegroundNotification:)name:UIApplicationWillEnterForegroundNotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(handleDidEnterBackgroundNotification:)name:UIApplicationDidEnterBackgroundNotificationobject:nil];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(handleFirstTimeLocationValidNotification:)name:BBUserLocationTheFirstTimeValidobject:nil];}return self;}(BOOL)isHideNavigationBar{return YES; }(void)dealloc{[[BBLocationManager defaultManager] removeDelegate:self];[self unregisterKVO];}pragma mark - 首页运营词埋点pragma mark - Select POI(void)BBHomeWorkOverlay:(BBHomeWorkOverlay *)overlay didCommuteBubbleStateChanged:(BBCommuteBubbleViewState)state{if (state == BBCommuteBubbleViewStateBigBubble) {[self closePoiPickerViewController];}}(void)showCardWithPOI:(JsonPOIInfo *)poi {[self showCardWithPOI:poi animation:NO];}(void)showCardWithPOI:(JsonPOIInfo *)poi animation:(BOOL)animation {if (self.isFullViewMode) {[self changeFullViewModeWithAnimation];}[[BBCalloutView sharedInstance] clear];[[BBMiniCalloutView defaultCalloutView] clear];[self.homeWorkOverlay setBubbleState:BBCommuteBubbleViewStateRemove];// 是否展示选中的点 titleBOOL showTitle = YES;if ([_homeWorkOverlay.annotationSet containsObject:poi]) {showTitle = NO;}BBPoiAnnotationPickerViewController *annotationPickerViewController = [self startInitPoiAnnotationPickerViewController];[annotationPickerViewController setCurrentAnnotation:poi annotations:nil mapview:self.baseView showTitle:showTitle animation:animation];[self updateSelectedIndoorFloorId:poi];[self showLongPressView];}pragma mark - 运营位(void)reloadOperationData{[self checkShouldShowHomeBannerView];[self checkShouldFetchHolidayInfo];}pragma mark - BBCloudControlQueryResultDelegate(void)cloudControlQueryResultDidChange:(BBCloudControlQueryResult *)result{[self reloadOperationData];}pragma mark - SignInAlertView// 首页浮窗数据拉取(void)fetchHolidayInfo{if (![self isTopLevelView]) { // 只有4个tab的一级界面才发请求return;}__weak typeof(self) weakSelf = self;ClientLayerInfo *layerInfo = [[BBMWAConfigDataManager defaultManager] operationLayerInfoListWithPosistion:nil].firstObject;if (layerInfo.layerUrl.length > 0 && [[BBMWAConfigDataManager defaultManager] layerCanShow]) {_hadFetchHolidayInfo = YES;SDWebImageManager *imageManager = [SDWebImageManager sharedManager];[imageManager loadImageWithURL:[NSURL URLWithString:layerInfo.layerUrl]options:SDWebImageRetryFailedprogress:nilcompleted:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {if (image && layerInfo) {strong[weakSelf showPopupViewIfNeed];}}];}}//浮层(void)showPopupViewIfNeed{if (![self isHomePageMapViewShow]) {return;}ClientLayerInfo *layerInfo = [[BBMWAConfigDataManager defaultManager] operationLayerInfoListWithPosistion:nil].firstObject;SDImageCache *imageCache = [SDImageCache sharedImageCache];UIImage *image = [imageCache imageFromDiskCacheForKey:layerInfo.layerUrl];if (!image || !layerInfo) {return;}if (self.signInAlertView) {[self.signInAlertView dismiss];self.signInAlertView = nil;}BBWeakSelf;self.signInAlertView = [[BBOperationFloatView alloc] initWithLayerInfo:layerInfo image:image];self.signInAlertView.detailButtonAction = ^void(BBOperationFloatView *alertView) {BBStrongSelf;NSURL *url = [NSURL URLWithString:layerInfo.actionUri];BBOpenApiQuery *openApiQuery = [BBBaseOpenApiManager analysisOpenUrl:url];NSString *scheme = openApiQuery.scheme;if ([scheme hasPrefix:@"http"]) {BBSignInH5ViewController *h5ViewController = [[BBSignInH5ViewController alloc] initWithImage:layerInfo holidayID:layerInfo.activityId];h5ViewController.isPresented = YES;BBNavigationController *navigationController = [[BBNavigationController alloc] initWithRootViewController:h5ViewController];[[BBUIUitl currentViewController] presentViewController:navigationController animated:YES completion:nil];}else {[BBBaseOpenApiManager handleOpenUrl:url withNavigation:strongSelf.navigationController];}strongSelf.signInAlertView = nil;};self.signInAlertView.animation = BBOperationFloatViewAnimationNormal;self.signInAlertView.closeButtonAction = ^(BBOperationFloatView *alertView) {BBStrongSelf;CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];animation.values = @[[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.24f, 1.24f, 0)],[NSValue valueWithCATransform3D:CATransform3DIdentity]];animation.keyTimes = @[@(0.25f/(0.25f+0.33f)),@(1)];[animation setDuration:0.25f+0.33f];[animation setCalculationMode:kCAAnimationLinear];strongSelf.signInAlertView = nil;};[self.signInAlertView showInView:self.view];[[BBMWAConfigDataManager defaultManager] layerDidShow];[self cancelShowReviewAlert];}(void)hidePopupViewIfNeed{if (self.signInAlertView) {[self.signInAlertView dismiss];}}pragma mark - 主题替换(void)skinChange{[self changeLocationArrow:NO];}(void)changeLocationArrow:(BOOL)isAppear{SkinDataManager *skin = [SkinDataManager defaultManager];self.baseView.userLocationView.pathForLocationImage = [skin skinLocateImagePathWithLocateType:SkinLocateDefault];self.baseView.userLocationView.pathForFailurelocationImage = [skin skinLocateImagePathWithLocateType:SkinLocateInvalidDefault];if (skin.locateCircleColor) {self.baseView.userLocationView.circleColor = skin.locateCircleColor;}}//----------------------------------------------------------pragma mark - View lifecycle(BOOL)shouldAutorotate{return YES;}(UIInterfaceOrientationMask)supportedInterfaceOrientations{return UIInterfaceOrientationMaskPortrait;}(void) gotoIndoorGuide{BBIndoorViewController *indoor = [[BBIndoorViewController alloc] init];indoor.mapView = self.baseView;indoor.centerPOI = JsonPOIInfo2FromBBPointInfo([self.baseView getActiveIndoorPOI]);indoor.sourceType = kIndoorSourceTypeGuide;[self.navigationController pushViewController:indoor animated:YES];}(void)setupAssociationView {self.associationView = [BBPoiAssociationView viewWithScene:BBPoiAssociationViewSceneMain];[_associationView setAssociatedMapView:self.baseView delegate:self];_associationView.viewMode = AssociateViewAllMode;_associationView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;[self.view addSubview:_associationView];}(void)viewDidLoad{[super viewDidLoad];[self appCanShowZoomView];if (self.baseView == nil){self.baseView = [BBMapViewFactory createMapViewWithFrame:self.view.bounds];self.baseView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;self.baseView.delegate = self;[self.baseView setMaxScale:MAX_SCALE_LEVEL_NORMAL];self.baseView.nickName = @"首页";[self registerKVO];}else{self.baseView.frame = self.view.bounds;}// 加载缓存[self loadFromArchive];self.baseView.allowsBackgroundLocationUpdates = YES;[self.baseView showsUserLocation:YES withMapCenter:NO];self.baseView.longPressedEnabled = YES;self.baseView.mapUserLocationView.canShowCallout = YES;[self resetMapViewFrame];[self.view insertSubview:self.baseView atIndex:0];[self setupAssociationView];[self clearUI];self.baseView.showTraffic = [BBPlistFileAccessor trafficSwitch];self.baseView.sateliteMode = [[NSUserDefaults standardUserDefaults] boolForKey:kOptionShowSatelite];BBWeakSelf;self.searchBarFrame = CGRectMake(kSearchBarLeft, kBBStatusBarHeight + (IS_IPHONE_6P ? 4 : 5), self.view.width - 2*kSearchBarLeft, kBBPoiSearchBarHeight);self.searchBarBaseView = [[BBPoiSearBarBaseView alloc] initWithFrame:_searchBarFrame];[self.searchBarBaseView setupVoiceInputView:self action:@selector(onSearchBarAction:) voiceButtonBlock:^{BBStrongSelf;[strongSelf.voiceNoticeTips hide];}];self.searchBarBaseView.slideViewButtonBlock = ^{BBStrongSelf;[[BBBadgeChainManager defaultManager] tapOnBadge:BBBadgeRedPointAtAccount];[strongSelf closeOtherUI];[[UIApplication sharedApplication] keyWindow].backgroundColor = [UIColor whiteColor];BBPersonCenterViewController *personVC = [[BBPersonCenterViewController alloc] init];[personVC doEnterAnimationLikePresent:strongSelf];if (![BBRegularBusDataManager defaultManager].isRegularBusSupport) {[[BBRegularBusDataManager defaultManager] checkRegularBusUserSupport];}[strongSelf clearVoiceAssistant];};[self.view addSubview:self.searchBarBaseView];self.bottomBarFrame = [self bottomBarDefaultFrame];self.mBottomBarView = [[BBBaseBottomView alloc] initWithFrame:self.bottomBarFrame];self.mBottomBarView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;self.mBottomBarView.baseNearBySearchBlock = ^(BMapPoint point, JsonPOIInfo *poi, CircumRecommendType rankingType, NSString *cityName) {BBStrongSelf;BBNearbyRecommendH5ViewController *circum = [[BBNearbyRecommendH5ViewController alloc] init];circum.location = QCoordinateForMapPoint(point);circum.poiInfo = poi;circum.mapView = [BBMapView defaultMapView];circum.cityName = cityName;[[UIApplication sharedApplication] keyWindow].backgroundColor = [UIColor whiteColor];CATransition *animation = [CATransition animation];[animation setDuration:0.3];[animation setType:kCATransitionMoveIn];[animation setSubtype:kCATransitionFromTop];[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];[strongSelf.navigationController.view.layer addAnimation:animation forKey:nil];[strongSelf.navigationController pushViewController:circum animated:NO];};[self.view addSubview:self.mBottomBarView];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleThemePackageChange:) name:kBBThemePackageThemeDidChangeNotification object:nil];// 准备开屏动画数据[self prepareOpeningAnimationIfNeeded];}(void)initAsyncMainThread {// 基础[self loadMapTextFontInfo];[self initOverlays];_useLeftHand = [[NSUserDefaults standardUserDefaults] boolForKey:KKeyUseLeftHand];[self checkPOIMainSearBarWords];// 数据初始化[[FavoriteDataManager defaultManager] loadFromArchive];[BBAttentionRealTimeBusManager defaultManager];[[BBRegularBusDataManager defaultManager] checkRegularBusUserSupport];// 界面初始化[self showFreeFlowRedPointIfNeeded];[self associateViewAdjustFrame];[self showVoiceNoticeTipsIfNeed];[self fetchOperationData];[self showFullTimeDriverChoiceViewIfNeed];}(void)tipView:(BBMainPageTipView *)tipView clickType:(BBMainPageClickType)clickType {switch (tipView.tipWeight) {case BBMainPageTipWeightOfflineMap:{if (clickType == BBMainPageClickTypeResponse) {[self jumpDownloadPage];}}break;case BBMainPageTipWeightOfflineMode:{if (clickType == BBMainPageClickTypeClose) {}}break;case BBMainPageTipWeightOfflinePrompt:{if (clickType == BBMainPageClickTypeAction) {[self jumpStartOfflinePromptUpdate];}}break;default:break;}if (![[BBVoiceAssistantManager defaultManager].panelViewManager isPanelViewShowing] && self.lottieBannerView) {[self.lottieBannerView showIfNeeded];}[self associateViewAdjustFrame];}(void)tipView:(BBMainPageTipView *)tipView heightForTipText:(CGFloat)height {if (!self.mainPageTipView.superview) {[self.view insertSubview:self.mainPageTipView aboveSubview:self.associationView];}if (self.lottieBannerView) {[self.lottieBannerView hideIfNeeded];[self.view insertSubview:self.mainPageTipView aboveSubview:self.lottieBannerView];}if ([[BBVoiceAssistantManager defaultManager].panelViewManager isPanelViewShowing]) {[self.mainPageTipView hideViewIfNeeded];[self associateViewAdjustFrame];}}(void)showLottieBannerWithLottieFileAtPath:(NSString *)filePath identify:(NSString *)identify bannerInfo:(ClientBannerInfo *)bannerInfo {if (self.lottieBannerView) {[self.lottieBannerView removeFromSuperview];}self.lottieBannerView = [[BBLottieBanner alloc] initWithFrame:CGRectMake(14, kBBNavigationBarHeight + 11, SCREEN_WIDTH - 28, 38)];self.lottieBannerView.delegate = self;BOOL ret = [self.lottieBannerView updateBannerWithLottieZipAtPath:filePathactionUri:bannerInfo.actionUriactivityId:identify];if (!ret) {return;}[self.view insertSubview:self.lottieBannerView aboveSubview:self.associationView];if (self.mainPageTipView.superview) {[self.lottieBannerView hideIfNeeded];[self.view insertSubview:self.lottieBannerView belowSubview:self.mainPageTipView];}if ([[BBVoiceAssistantManager defaultManager].panelViewManager isPanelViewShowing]) {[self.lottieBannerView hideIfNeeded];}[[BBMWAConfigDataManager defaultManager] bannerDidShow:KHomeAdPosition];[self associateViewAdjustFrame];if (bannerInfo.autoClose > 0) {BBWeakSelf;dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(bannerInfo.autoClose * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{BBStrongSelf;[strongSelf.lottieBannerView foldInfoLabel];});}}(void)hideTipAndBannerIfNeeded {[self.mainPageTipView hideViewIfNeeded];[self.lottieBannerView hideIfNeeded];[self associateViewAdjustFrame];}(void)showTipAndBannerIfNeeded {BOOL ret = [self.mainPageTipView showViewIfNeeded];if (ret) {[self.view insertSubview:self.mainPageTipView aboveSubview:self.associationView];}if (self.lottieBannerView) {[self.lottieBannerView showIfNeeded];if (ret) {[self.view insertSubview:self.mainPageTipView aboveSubview:self.lottieBannerView];}}[self associateViewAdjustFrame];}(void)checkShouldShowHomeBannerView {ClientBannerInfo *bannerInfo = [[BBMWAConfigDataManager defaultManager] operationLottieZipBannerInfoWithPosition:KHomeAdPosition];if (bannerInfo) {BBWeakSelf;[[BBLottieZipDataManager sharedInstance] downloadLottieZipWithUrl:bannerInfo.imgUrl identify:[bannerInfo identify] completeBlock:^(BOOL success, NSString *filePath, NSError *error) {dispatch_async(dispatch_get_main_queue(), ^{BBStrongSelf;if (success && filePath.length && !strongSelf.isFullViewMode) {[strongSelf showLottieBannerWithLottieFileAtPath:filePath identify:[bannerInfo identify] bannerInfo:bannerInfo];}});}];} else {[[BBLottieZipDataManager sharedInstance] clearLastIdentify];if (self.lottieBannerView) {[self.lottieBannerView removeFromSuperview];self.lottieBannerView.delegate = nil;self.lottieBannerView = nil;[self associateViewAdjustFrame];}}}(void)checkShouldFetchHolidayInfo {if (!_hadFetchHolidayInfo) {if ([NSThread isMainThread]) {[self fetchHolidayInfo];} else {dispatch_async(dispatch_get_main_queue(), ^{[self fetchHolidayInfo];});}}}pragma mark - BBLottieBannerDelegate Method(void)lottieBanner:(BBLottieBanner *)banner didSelectActionUrl:(NSURL *)url activityId:(NSString *)activityId {[BBBaseOpenApiManager handleOpenUrl:url withNavigation:[BBUIUitl currentViewController].navigationController];}(void)lottieBannerDidFoldInfoLabel:(BBLottieBanner *)banner {[self associateViewAdjustFrame];}(void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];[self.navigationController setNavigationBarHidden:YES animated:animated];[self.baseView viewWillAppear];isViewDidAppear_ = YES;if ([SkinDataManager defaultManager].usingSkin && ![RouteNavigationDataManager defaultManager].isNavigating) {[self changeLocationArrow:YES];}BOOL isShowTraffic = [BBPlistFileAccessor trafficSwitch];[_associationView setTrafficStateButtonState:NO active:isShowTraffic];self.baseView.showTraffic = isShowTraffic;self.mBottomBarView.width = self.view.width;self.mBottomBarView.isViewShowing = YES;[self checkScenicAreaWithBlock:nil];[self toggleOpeningAnimationIfNeeded];[self.lottieBannerView playAnimationIfNeeded];[self checkCommuteGuidancePopViewShow];[self updateFavOverlayStatus];if (self.isFullViewMode){[self changeFullViewModeWithAnimation];}}(void)viewDidAppear:(BOOL)animated{[super viewDidAppear:animated];[BBMapViewFactory checkMapStack];[self.baseView enableScaleAndLogoMode];[self showOfflineModeTipsIfNeeded];if (!_hadFetchHolidayInfo && [BBLocationManager defaultManager].locationAvailable) {[self fetchHolidayInfo];}if([self isTopLevelView]){[self checkOfflineMapRongHeStatus];}[self.baseView setMapIndoorActiveScreenArea:CGRectMake(0, 20+kBBNavigationBarHeight, self.baseView.width, self.baseView.height-20-kBBNavigationBarHeight-147)];[[CloseRoadDataFetcher shareFetcher] setMainMapView:self.baseView showIcon:YES];[[BBUgcReportEventDataManager sharedInstance] startRefreshDataWithMap:self.baseView];[[BBUgcReportRecordDataManager sharedInstance] startRefreshRecord];[[BBPageSceneManager sharedInstance] switchToScene:kPageSceneUnknown];if ([[BBOfflineModeManager shareInstance] isInOfflineMode]) {[self.voiceNoticeTips hide];}[self showTestFlightPopupIfNeeded];[self showTestFlightStableVersionReleasedPopupIfNeeded];}(void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];[[BBUgcReportEventDataManager sharedInstance] stopRefreshData];[[BBUgcReportRecordDataManager sharedInstance] stopRefreshRecord];[[CloseRoadDataFetcher shareFetcher] setMainMapView:nil];self.mBottomBarView.isViewShowing = NO;[self.lottieBannerView stopAnimationIfNeeded];if (self.homeWorkOverlay.bubbleState == BBCommuteBubbleViewStateBigBubble) {NSMutableDictionary *dict = [[BBCommuteDataManager defaultManager] reportDicWithType:BBCommuteBubbleDismissTypeOtherPage];}[self.homeWorkOverlay setBubbleState:BBCommuteBubbleViewStateRemove];[self.realtimeBusHomeModule unregisterWithMapView:self.baseView];[self dismissWeatherAnimation];[self stopLocationReportIfNeed];if (self.associationView.locationButton.trackingState == BBLocationButtonTrackingStateWaiting) {self.associationView.locationButton.trackingState = BBLocationButtonTrackingStateNormal;}[[iFlyTTSManager defaultManager] stopPlayingTTSByRouteGuidance];}(void)viewDidDisappear:(BOOL)animated{[super viewDidDisappear:animated];[self.baseView viewDidDisappear];[self.voiceNoticeTips hide];isViewDidAppear_ = NO;}(void)viewDidLayoutSubviews{[super viewDidLayoutSubviews];BOOL isPortrait = UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation);if (!([RouteNavigationDataManager defaultManager].isNavigating && !isPortrait)){[[BBMapView defaultMapView] setCenterMoveRight:0];}self.searchBarBaseView.width = self.view.width - 2 * self.searchBarBaseView.left;self.bottomBarFrame = [self bottomBarDefaultFrame];}@end// main, 1// main, 2// 3NSLog(@"%@, 1", [NSThread currentThread]);dispatch_queue_t queue = dispatch_queue_create("com.test.queue", NULL);dispatch_sync(queue, ^{NSLog(@"%@, 2", [NSThread currentThread]);});NSLog(@"3");// main, 1// 3// com.test.queue, 2NSLog(@"%@, 1", [NSThread currentThread]);dispatch_queue_t queue = dispatch_queue_create("com.test.queue", NULL);dispatch_async(queue, ^{NSLog(@"%@, 2", [NSThread currentThread]);});NSLog(@"3");// main, 1// main, 2// 3NSLog(@"%@, 1", [NSThread currentThread]);dispatch_queue_t queue = dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_CONCURRENT);dispatch_sync(queue, ^{NSLog(@"%@, 2", [NSThread currentThread]);});NSLog(@"3");// main, 1// 3// block1,block1,block2,block2 com.test.queueNSLog(@"%@, 1", [NSThread currentThread]);dispatch_queue_t queue = dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_CONCURRENT);dispatch_async(queue, ^{for (int i = 0; i < 2; i++) {NSLog(@"block1 %@", [NSThread currentThread]);}});dispatch_async(queue, ^{for (int i = 0; i < 2; i++) {NSLog(@"block2 %@", [NSThread currentThread]);}});NSLog(@"3");// main, 1// 死锁NSLog(@"%@, 1", [NSThread currentThread]);dispatch_queue_t queue = dispatch_get_main_queue();dispatch_sync(queue, ^{NSLog(@"%@, 2", [NSThread currentThread]);});NSLog(@"3");// main, 1// 3// block1,block1,block2,block2,mainNSLog(@"%@, 1", [NSThread currentThread]);dispatch_queue_t queue = dispatch_get_main_queue();dispatch_async(queue, ^{for (int i = 0; i < 2; i++) {NSLog(@"block1 %@", [NSThread currentThread]);}});dispatch_async(queue, ^{for (int i = 0; i < 2; i++) {NSLog(@"block2 %@", [NSThread currentThread]);}});NSLog(@"3");