加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – Xcode 8与“发布:最快,最小[-Os]”有一些奇怪的问题,在

发布时间:2020-12-15 01:38:27 所属栏目:百科 来源:网络整理
导读:我的项目中有1个目标,并有3个构建配置 调试生产发布 当我使用调试或生产配置运行我的应用程序,它的工作正常没有任何问题,但是当我更改我的构建配置以释放它给我一些奇怪的问题,如一些字符串值不存储在plist文件中,当我调试我的发布模式,我在调试器中没有任何
我的项目中有1个目标,并有3个构建配置

调试生产&发布

当我使用调试或生产配置运行我的应用程序,它的工作正常没有任何问题,但是当我更改我的构建配置以释放它给我一些奇怪的问题,如一些字符串值不存储在plist文件中,当我调试我的发布模式,我在调试器中没有任何价值.

对我的代码和构建设置进行了太多的调查,并提出了一些建议形式,所以我已经做了如下改变了我的Build设置.

在Apple LLVM 8.0代码生成标头下更改优化级别

获取以下问题优化级别:

enter image description here

下列问题解决了优化级别的变化:

enter image description here

不知道为什么它在无[-O0]中工作.

任何人都可以帮助我上面的补丁?

以上是影响优化级别的敏感部分.

我保存的书签代码,我有价值,但仍然存储在plist的NULL.

- (IBAction)bookmark:(id)sender{

    DimensionModel *aDimensionModel = APPDELEGATE.selected_dimensionModel;
    EmirateModel *aEmirateModel = APPDELEGATE.selected_emirateModel;
    DivisionModel *aDivisionModel = APPDELEGATE.selected_divisionModel;
    __weak NSString *aStrVCName = self.bookMarkViewModel.selectedStrVCName;

    //Add Title string in Dictionary and then in Plist
    __weak NSString *aStrTitle = [NSString stringWithFormat:@"%@",aDimensionModel.dimension_description];
    aStrTitle = [aStrTitle stringByReplacingOccurrencesOfString:@"(null)" withString:@""];

    if (IS_ENGLISH) {
        aStrTitle = [aStrTitle stringByAppendingString:[NSString stringWithFormat:@" - %@ - %@ - %@",aDivisionModel.division_name,aEmirateModel.emirate_name,[self.bookMarkViewModel.strDataType isEqualToString:@"Number"]?@"(0)":@"(%)"]];
    }else{
        aStrTitle = [aStrTitle stringByAppendingString:[NSString stringWithFormat:@" - %@ - %@ - %@",[Utilities getEmirateNameinArabicByCode:aEmirateModel.emirate_code],[self.bookMarkViewModel.strDataType isEqualToString:@"Number"]?@"(0)":@"(%)"]];
    }

    if (APPDELEGATE.selectedDimRecordTimeModel.record_year == -1) {
        aStrTitle = [aStrTitle stringByAppendingString:[NSString stringWithFormat:@" - %@",[LanguageUtility getLocalizedStringForKey:@"All Years"]]];
    }else{
        aStrTitle = [aStrTitle stringByAppendingString:[NSString stringWithFormat:@" - %ld",(long)APPDELEGATE.selectedDimRecordTimeModel.record_year]];
    }


    NSMutableDictionary *aMutDicGraphDetail = [NSMutableDictionary new];

    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",self.bookMarkViewModel.strSelectedDim] forKey:@"DimCode"];
    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",aStrVCName] forKey:@"VCName"];
    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",PLIST_TITLE_BOOKMARK] forKey:@"PlistBookmark"];
    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",IS_ENGLISH?@"ENGLISH":@"ARABIC"] forKey:@"Language"];
    if (self.bookMarkViewModel.strSelectedDim == nil) {
        [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",[LanguageUtility getLocalizedStringForKey:aStrVCName]] forKey:@"Title"];
    }else{
        [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",aStrTitle] forKey:@"Title"];
    }


    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",APPDELEGATE.selectedDimRecordTimeModel.record_time] forKey:@"RecordTime"];
    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%ld",(long)APPDELEGATE.selectedDimRecordTimeModel.record_year] forKey:@"RecordYear"];
    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",aEmirateModel.emirate_code] forKey:@"EmirateCode"];
    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",self.bookMarkViewModel.strDataType] forKey:@"DataType"];

    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",aDivisionModel.division_code] forKey:@"DivisionCode"];
    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%d",APPDELEGATE.isDataTypeSwitchHide] forKey:@"switchHide"];
    [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",APPDELEGATE.strYearOrMonthFromRbtnCtrl] forKey:@"YearOrMonthFromRbtnCtrl"];
    [aMutDicGraphDetail setObject:@(self.bookMarkViewModel.selectedIndexPath).stringValue forKey:DimSelectedIndex];

    /* Check for RegionVC  and CountryVC*/
    if ([aStrVCName isEqualToString:@"RegionMainVC"] || [aStrVCName isEqualToString:@"CountryMainVC"]){
        [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%@",self.bookMarkViewModel.strComparison] forKey:@"Comparison"];
        [aMutDicGraphDetail setObject:[NSString stringWithFormat:@"%ld",self.bookMarkViewModel.intSelectedRegionId] forKey:@"RegionId"];
    }
    [self.bookMarkViewModel saveBookmark:aMutDicGraphDetail];

    aStrVCName = nil;
}

使用上面的代码,所有的值都被成功地存储到plist中,但是aStrTitle在它里面是有价值的,它仍然存储为null.

解决方法

你的问题在这一行:

__weak NSString *aStrTitle = [NSString stringWithFormat:@"%@",aDimensionModel.dimension_description];

?[NSString stringWithFormat:]创建一个保留计数等于零的新字符串.这通常是可以的,因为这个值被赋值给一个强变量,或者作为参数传递给方法调用.在这两种情况下,保留计数增加,值保持不变.但是您将这个新的字符串分配给__weak变量!弱变量不影响保留计数,因此在执行该行后仍保持零.所以创建的字符串在创建后立即被删除.

解决方法很简单:删除__weak说明符,你会很好去.

声明局部变量没有任何意义(除非它们被块捕获).也像这样“清理”:aStrVCName = nil;根本没有影响.

>方法完成执行时,所有局部变量都会自动释放.> aStrVCName是弱的,所以它永远不会影响它指向的对象的保留计数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读