当我在 viewcontroller 上使用 3 视图时,目标 c 会变慢

Posted

技术标签:

【中文标题】当我在 viewcontroller 上使用 3 视图时,目标 c 会变慢【英文标题】:when i am using 3 view on viewcontroller it get slow in objective c 【发布时间】:2017-02-21 12:35:21 【问题描述】:

我在一个 UIViewController 上使用 3 个视图。因此,我在 viewDidLoad() 中有很多代码,如下所示:

- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    customActivityIndicator.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"tmp-0.gif"],[UIImage imageNamed:@"tmp-1.gif"],[UIImage imageNamed:@"tmp-2.gif"],[UIImage imageNamed:@"tmp-3.gif"],[UIImage imageNamed:@"tmp-4.gif"],[UIImage imageNamed:@"tmp-5.gif"],[UIImage imageNamed:@"tmp-6.gif"],[UIImage imageNamed:@"tmp-7.gif"],[UIImage imageNamed:@"tmp-8.gif"],[UIImage imageNamed:@"tmp-9.gif"],[UIImage imageNamed:@"tmp-10.gif"],[UIImage imageNamed:@"tmp-11.gif"],[UIImage imageNamed:@"tmp-12.gif"],[UIImage imageNamed:@"tmp-13.gif"],[UIImage imageNamed:@"tmp-14.gif"],[UIImage imageNamed:@"tmp-15.gif"],nil];
    customActivityIndicator.animationDuration = 1.0; // in seconds
    customActivityIndicator.animationRepeatCount = 0; // sets to loop

    [customActivityIndicator startAnimating];

    btn.hidden=YES;


    UILabel *lab =[[UILabel alloc] init];
    lab.text =  [NSString awesomeIcon:FaMailReply];

    UIImage *listImage2 = [UIImage imageNamed:@"backicon.png.png"];
    UIButton *listButton2 = [UIButton buttonWithType:UIButtonTypeCustom];
    listButton2.backgroundColor=[UIColor whiteColor];
    [[listButton2 layer] setBorderWidth:0.5f];
    listButton2.layer.borderColor =[[UIColor blackColor] CGColor];
    listButton2.layer.cornerRadius = btn.bounds.size.width / 3.4;// this value vary as per your desire
    listButton2.clipsToBounds = YES;

    UIFont *font = [UIFont fontWithName:@"FontAwesome" size:15.0];
    UIColor *color = [UIColor blueColor];

    NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,color,NSForegroundColorAttributeName, nil];
    //  [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,color,NSForegroundColorAttributeName, nil];

    NSAttributedString *attributedStr = [[NSAttributedString alloc] initWithString:lab.text attributes:attrsDictionary];



    // get the image size and apply it to the button frame
    CGRect listButton2Frame = listButton2.frame;
    listButton2Frame.size = listImage2.size;
    listButton2.frame = listButton2Frame;

    [listButton2 setAttributedTitle:attributedStr forState:UIControlStateNormal];
    [listButton2 addTarget:self
                    action:@selector(LogoutClick:)
          forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *jobsButton2 =
    [[UIBarButtonItem alloc] initWithCustomView:listButton2];


    //Notificaation Icon Button...


    UILabel *lablnotification =[[UILabel alloc] init];
    //    lab.font = [UIFont fontWithName:@"FontAwesome" size:8];
    //  lab.textColor =  [UIColor whiteColor];
    lablnotification.text =  [NSString awesomeIcon:FaHome];

    UIImage *listImage4 = [UIImage imageNamed:@"notification.png"];
    UIButton *listButton4 = [UIButton buttonWithType:UIButtonTypeCustom];
    listButton4.backgroundColor=[UIColor whiteColor];
    [[listButton4 layer] setBorderWidth:0.5f];
    listButton4.layer.borderColor =[[UIColor blackColor] CGColor];
    listButton4.layer.cornerRadius = btn.bounds.size.width / 3.4;// this value vary as per your desire
    listButton4.clipsToBounds = YES;

    UIFont *fontnotification = [UIFont fontWithName:@"FontAwesome" size:18.0];
    UIColor *colornotification = [UIColor blueColor];

    NSDictionary *attrsDictionarynotification = [NSDictionary dictionaryWithObjectsAndKeys:fontnotification,NSFontAttributeName,colornotification,NSForegroundColorAttributeName, nil];
    //  [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,color,NSForegroundColorAttributeName, nil];

    NSAttributedString *attributedStrnotification = [[NSAttributedString alloc] initWithString:lablnotification.text attributes:attrsDictionarynotification];

    // get the image size and apply it to the button frame
    CGRect listButton4Frame = listButton4.frame;
    listButton4Frame.size = listImage4.size;
    listButton4.frame = listButton4Frame;

    [listButton4 setAttributedTitle:attributedStrnotification forState:UIControlStateNormal];
    [listButton4 addTarget:self
                    action:@selector(ActualNotificationClick:)
          forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *jobsButton4 =
    [[UIBarButtonItem alloc] initWithCustomView:listButton4];

    UIImage *listImage3 = [UIImage imageNamed:@"ec2.png"];
    UIButton *listButton3 = [UIButton buttonWithType:UIButtonTypeCustom];

    // get the image size and apply it to the button frame
    CGRect listButton3Frame = listButton3.frame;
    listButton3Frame.size = listImage3.size;
    listButton3.frame = listButton3Frame;

    [listButton3 setImage:listImage3 forState:UIControlStateNormal];
    [listButton3 addTarget:self
                    action:@selector(EmployeeClick:)
          forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *jobsButton3 =
    [[UIBarButtonItem alloc] initWithCustomView:listButton3];

    self.navigationItem.rightBarButtonItems= [NSArray arrayWithObjects:jobsButton2,jobsButton4, nil];
    self.navigationItem.leftBarButtonItems=[NSArray arrayWithObjects:jobsButton3, nil];


    //NSUserDefault...

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    userid = [defaults objectForKey:@"UserId"];
    NSLog(@"User Id is =%@",userid);
    ServerString=[defaults objectForKey:@"ServerString"];

    DefaultRegionIDString=[defaults objectForKey:@"DefaultRegionIDString"];
    DefaultBranchIDString=[defaults objectForKey:@"DefaultBranchIDString"];
    DefaultSiteIDString=[defaults objectForKey:@"DefaultSiteIDString"];
    DefaultLocationString=[defaults objectForKey:@"DefaultLocationString"];
    DefaultDateString =[defaults objectForKey:@"DefaultDateString"];
    DefaultTimeString =[defaults objectForKey:@"DefaultTimeString"];
    DefaultEmployeeNameString=[defaults objectForKey:@"DefaultEmployeeNameString"];
    DefaultRegionNameString=[defaults objectForKey:@"DefaultRegionNameString"];
    DefaultBranchNameString=[defaults objectForKey:@"DefaultBranchNameString"];
    DefaultSiteNameString=[defaults objectForKey:@"DefaultSiteNameString"];
    DefaultEventTypeString=[defaults objectForKey:@"DefaultEventTypeString"];
    DefaultIncidentTypeString=[defaults objectForKey:@"DefaultIncidentTypeString"];
    DefaultsIncidentNameString=[defaults objectForKey:@"DefaultsIncidentNameString"];
    SegmentStringCheck=[defaults objectForKey:@"SegmentStringCheck"];
    CheckIncidentString=[defaults objectForKey:@"CheckIncidentString"];

    if([DefaultEventTypeString isEqualToString:@"1"])
    
        lblreportregion.text = DefaultRegionIDString;
        lblreportbranch.text = DefaultBranchIDString;
        lblreportsite.text = DefaultSiteIDString;
        //  lblreportinjurytype.text=DefaultIncidentTypeString;
        txtreportlocation.text = DefaultLocationString;
        txtreportdate.text = DefaultDateString;
        txtreporttime.text = DefaultTimeString;
        txtreportemp.text = DefaultEmployeeNameString;
        txtreportregion.text=DefaultRegionNameString;
        txtreportbranch.text=DefaultBranchNameString;
        txtreportsite.text=DefaultSiteNameString;
        //  txtreportinjurytype.text = DefaultsIncidentNameString;

    
    else if ([DefaultEventTypeString isEqualToString:@"2"])
    
        lblnearregion.text = DefaultRegionIDString;
        lblnearbranch.text = DefaultBranchIDString;
        lblnearsite.text = DefaultSiteIDString;
        txtnearlocation.text = DefaultLocationString;
        txtneardate.text = DefaultDateString;
        txtneartime.text = DefaultTimeString;
        txtnearemp.text = DefaultEmployeeNameString;
        txtnearregion.text=DefaultRegionNameString;
        txtnearbranch.text=DefaultBranchNameString;
        txtnearsite.text=DefaultSiteNameString;
    
    else if ([DefaultEventTypeString isEqualToString:@"3"])
    
        lblspotingregion.text = DefaultRegionIDString;
        lblspotingbranch.text = DefaultBranchIDString;
        lblspotingsite.text = DefaultSiteIDString;
        txtspotinglocation.text = DefaultLocationString;
        txtspotingdate.text = DefaultDateString;
        txtspotingtime.text = DefaultTimeString;
        txtsportingemp.text = DefaultEmployeeNameString;
        txtspotingregion.text=DefaultRegionNameString;
        txtspotingbranch.text=DefaultBranchNameString;
        txtspotingsite.text=DefaultSiteNameString;
    

    if([SegmentStringCheck isEqualToString:@"0"])
    
        segment.selectedSegmentIndex = UISegmentedControlNoSegment;
        segment.selectedSegmentIndex = 0;
        viewspoting.hidden=NO;
        viewnear.hidden=YES;
        viewreport.hidden=YES;
    
    else if ([SegmentStringCheck isEqualToString:@"1"])
    
        segment.selectedSegmentIndex = UISegmentedControlNoSegment;
        segment.selectedSegmentIndex = 1;
        viewspoting.hidden=YES;
        viewnear.hidden=NO;
        viewreport.hidden=YES;
        //Near...

        [self nearserverconnection];
        [self nearserverconnectionincident];
        [self nearserverconnectionactivity];
    
    else if ([SegmentStringCheck isEqualToString:@"2"])
    
        segment.selectedSegmentIndex = UISegmentedControlNoSegment;
        segment.selectedSegmentIndex = 2;
        viewspoting.hidden=YES;
        viewnear.hidden=YES;
        viewreport.hidden=NO;


        //Report...

        [self reportserverconnection];
        [self reportserverconnectioninjury];
    
    else
    
        segment.selectedSegmentIndex = UISegmentedControlNoSegment;
        segment.selectedSegmentIndex = 0;
        viewspoting.hidden=NO;
        viewnear.hidden=YES;
        viewreport.hidden=YES;
    


    //.........................//
    //Sporting Hide Code...

    //Table...
    tablesportingbranch.hidden=YES;
    tablesportingregion.hidden=YES;
    tablesportingsite.hidden=YES;

    //Label...
    lblsportingactivitytype.hidden=YES;
    lblsportingdept.hidden=YES;
    lblsportingemp.hidden=YES;
    lblspotingbranch.hidden=YES;
    lblspotingincidenttype.hidden=YES;
    lblspotingregion.hidden=YES;
    lblspotingsite.hidden=YES;



    //TextFieldDelegate...
    txtspotingsite.delegate=self;
    txtsportingemp.delegate=self;
    txtspotinglocation.delegate=self;

    //Date Picker...
    pickerspotingdate.hidden=YES;
    pickerspotingtime.hidden=YES;


    //............................//

    //Near Hide Code...

    //View...
   // viewnear.hidden=YES;

    //Table...
    tablenearbranch.hidden=YES;
    tablenearregion.hidden=YES;
    tablenearsite.hidden=YES;

    //Label...
    lblnearactivitytype.hidden=YES;
    lblnearbranch.hidden=YES;
    lblneardept.hidden=YES;
    lblnearemp.hidden=YES;
    lblnearincidenttype.hidden=YES;
    lblnearregion.hidden=YES;
    lblnearsite.hidden=YES;



    //TextFieldDelegate..
    txtnearsite.delegate=self;
    txtnearemp.delegate=self;
    txtnearlocation.delegate=self;

    //Date Picker...
    pickerneardate.hidden=YES;
    pickerneartime.hidden=YES;

    //...........................//

    //Report Hide View Code...

    //View...
   // viewreport.hidden=YES;

    //Table...
    tablereportbranch.hidden=YES;
    tablereportinjurytype.hidden=YES;
    tablereportregion.hidden=YES;
    tablereportsite.hidden=YES;

    //Label...
    lblreportbranch.hidden=YES;
    lblreportdept.hidden=YES;
    lblreportemp.hidden=YES;
    lblreportinjurytype.hidden=YES;
    lblreportregion.hidden=YES;
    lblreportsite.hidden=YES;

    //TextFieldDelegate...
    txtreportsite.delegate=self;
    txtreportemp.delegate=self;
    txtreportlocation.delegate=self;

    //Date Picker...
    pickerreporttime.hidden=YES;
    pickereportdate.hidden=YES;

    //.............................//

    //Font Asowme

    //Show...
    lblspotingShow.font = [UIFont fontWithName:@"FontAwesome" size:15];
    lblspotingShow.textColor =  [UIColor blackColor];
    lblspotingShow.text =  [NSString awesomeIcon:FaEye];

    //Scroll View...
    [scrollspoting setContentSize:CGSizeMake(300, 500)];
    [scrollnear setContentSize:CGSizeMake(300, 500)];
    [scrollreport setContentSize:CGSizeMake(300, 730)];


    UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandler:)];
    [gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
    [self.view addGestureRecognizer:gestureRecognizer];

    //Button Diamiter...

    //Spoting Button...

    btnsportinghideadd.layer.cornerRadius = 4; // this value vary as per your desire
    btnsportinghideadd.clipsToBounds = YES;

    //Near Button...

    btnnearhideadd.layer.cornerRadius = 4; // this value vary as per your desire
    btnnearhideadd.clipsToBounds = YES;

    //Report Button...

    btnreportnext.layer.cornerRadius = 4; // this value vary as per your desire
    btnreportnext.clipsToBounds = YES;

    //Spoting...

    [self spotingserverconnection];
    [self spotingserverconnectionactivity];
    [self spotingserverconnectionincident];


     [txtspotingsite addTarget:self action:@selector(spotingtextFieldDidChangeSite:) forControlEvents:UIControlEventEditingChanged];


    // prevents the scroll view from swallowing up the touch event of child buttons

    [txtnearsite addTarget:self action:@selector(neartextFieldDidChangeSite:) forControlEvents:UIControlEventEditingChanged];

    [txtreportsite addTarget:self action:@selector(reporttextFieldDidChangeSite:) forControlEvents:UIControlEventEditingChanged];

    UITapGestureRecognizer *tapGesturereportinjury = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideSubViewreportinjury)];

    // prevents the scroll view from swallowing up the touch event of child buttons
    tapGesturereportinjury.cancelsTouchesInView = NO;

    [scrollreport addGestureRecognizer:tapGesturereportinjury];

    IssueSelectedIDarray=[[NSMutableArray alloc] init];
    IssueSelectedNamearray=[[NSMutableArray alloc] init];


    ReportInjurySelectedNamearray=[[NSMutableArray alloc] init];
    ReportInjurySelectedIDarray=[[NSMutableArray alloc] init];


    [self testInternetConnection];


    //Spoting Date and Time..


    NSDateFormatter *Spotingdateformatter;

    Spotingdateformatter = [[NSDateFormatter alloc] init];
    [Spotingdateformatter setDateFormat:@"dd/MM/yyyy"];

    SpotingdateString = [Spotingdateformatter stringFromDate:[NSDate date]];
    NSLog(@"Current Time =%@",SpotingdateString);
    CurrentDate=SpotingdateString;


    NSDate * now = [NSDate date];
    NSDateFormatter *Spotingtimeformatter = [[NSDateFormatter alloc] init];
    [Spotingtimeformatter setDateFormat:@"hh:mm"];
    SpotingTimeString = [Spotingtimeformatter stringFromDate:now];
    NSLog(@"newDateString %@", SpotingTimeString);

    //Near Date and Time..


    NSDateFormatter *Neardateformatter;

    Neardateformatter = [[NSDateFormatter alloc] init];
    [Neardateformatter setDateFormat:@"dd/MM/yyyy"];

    NeardateString = [Neardateformatter stringFromDate:[NSDate date]];
    NSLog(@"Current Time =%@",NeardateString);


    NSDate * nowNear = [NSDate date];
    NSDateFormatter *Neartimeformatter = [[NSDateFormatter alloc] init];
    [Neartimeformatter setDateFormat:@"hh:mm"];
    NearTimeString = [Neartimeformatter stringFromDate:nowNear];
    NSLog(@"newDateString %@", NearTimeString);


    //Report Date and Time..


    NSDateFormatter *Reportdateformatter;

    Reportdateformatter = [[NSDateFormatter alloc] init];
    [Reportdateformatter setDateFormat:@"dd/MM/yyyy"];

    ReportdateString = [Reportdateformatter stringFromDate:[NSDate date]];
    NSLog(@"Current Time =%@",ReportdateString);


    NSDate * nowReport = [NSDate date];
    NSDateFormatter *Reporttimeformatter = [[NSDateFormatter alloc] init];
    [Reporttimeformatter setDateFormat:@"hh:mm"];
    ReportTimeString = [Reporttimeformatter stringFromDate:nowReport];
    NSLog(@"newDateString %@", ReportTimeString);


它的工作速度很慢。有什么办法可以加快速度吗?

ViewName *Incedent =[[ViewName alloc] initWithNibName:@"ViewName" bundle:nil];
[self.navigationController pushViewController:Incedent animated:YES];

我已经用这个代码来pushviewcontroller了。

【问题讨论】:

你有很多代码冗余,所以先优化你的代码工作。 @the_dahiya_boy 怎么做?? 避免用大写命名你的变量。为什么你用 3 个不同的 NSDateFormatter 来做同样的事情?如果您在每个 ViewController 中使用相同的代码,您可能希望对它们进行子类化,或者至少添加协议/扩展。 我想说你应该首先开始创建视图的自定义类来获取每个视图的对象,还重构重复的代码,最后在 viewDidLoad 中调用你的对象 init ,这样你就可以得到一个更干净的 viewController 和还保留您的视图/类/项目的概述 正如@Larme 提到的,NSDateFormatter 的使用量很大。所以最好创建一个并更改单个格式化程序的setDateFormat 【参考方案1】:

您需要评估您的代码在做什么,并找出哪里它很慢。我不知道这个方法在做什么,但我赌的是:

[self testInternetConnection];

是问题之一。注释掉那行,看看会发生什么。

【讨论】:

嗯,是的......但是“检查互联网连接”会发生什么?是否尝试 10 秒建立连接?是否测试是否可以访问 10 个不同的服务器?您是否必须在您的代码中检查连接?

以上是关于当我在 viewcontroller 上使用 3 视图时,目标 c 会变慢的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 在 navigationController 上嵌入 viewController

从内存中删除未使用的 ViewController

当我的 ViewController 是导航应用程序崩溃时,AFURI SessionManager

如何在 Swift 3 中刷新视图

ViewController 在 iOS Simulator swift 中显示为空

Swift 3 / Alamofire 4:在 TableView 上使用 ID 获取数据