调试生产&发布
当我使用调试或生产配置运行我的应用程序,它的工作正常没有任何问题,但是当我更改我的构建配置以释放它给我一些奇怪的问题,如一些字符串值不存储在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]”有一些奇怪的问题,在某些情况下功能不好所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)