ios – Xcode 8与“发布:最快,最小[-Os]”有一些奇怪的问题,在某些情况下功能不好

ios – Xcode 8与“发布:最快,最小[-Os]”有一些奇怪的问题,在某些情况下功能不好,第1张

概述我的项目中有1个目标,并有3个构建配置 调试生产&发布 当我使用调试或生产配置运行我的应用程序,它的工作正常没有任何问题,但是当我更改我的构建配置以释放它给我一些奇怪的问题,如一些字符串值不存储在plist文件中,当我调试我的发布模式,我在调试器中没有任何价值. 对我的代码和构建设置进行了太多的调查,并提出了一些建议形式,所以我已经做了如下改变了我的Build设置. 在Apple LLVM 8.0 我的项目中有1个目标,并有3个构建配置

调试生产&发布

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

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

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

获取以下问题优化级别:

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

不知道为什么它在无[-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是弱的,所以它永远不会影响它指向的对象的保留计数.

总结

以上是内存溢出为你收集整理的ios – Xcode 8与“发布:最快,最小[-Os]”有一些奇怪的问题,在某些情况下功能不好全部内容,希望文章能够帮你解决ios – Xcode 8与“发布:最快,最小[-Os]”有一些奇怪的问题,在某些情况下功能不好所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1064006.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存