iOS enum C方法 DEBUG, RELEASE的隐藏的一个坑
开发了一个app, 在debug模式下没有任何问题,在release模式下就直接崩溃.
经过一段时间的定位终于定位到如下的这一段代码:
E_BZ_TestType type = [dic[@"type"] integerValue];
// 调用代码
self.sourceLabel.text = [NSString stringWithFormat:@"%@", NSStringFromE_BZ_TestType(type)];
其中枚举定义和枚举翻译中文定义如下:
// 枚举 在一个 XXDefine.h中
typedef NS_ENUM(NSInteger, E_BZ_TestType) {
kE_BZ_TestType_None = ,
kE_BZ_TestType_One = ,
};
// 翻译函数定义
NSString *NSStringFromE_BZ_TestType(E_BZ_TestType type); // 翻译函数实现 在一个 XXDefine.m中
NSString *NSStringFromE_BZ_TestType(E_BZ_TestType type)
{
switch (type) {
case kE_BZ_TestType_None:
return @"没有";
case kE_BZ_TestType_One:
return @"一";
default:
break;
}
}
注意上面的代码:
1. 代码不在任何类内部
2. 翻译函数的 default 是break, 没有返回任何值.
3. 在debug/Release 模式下, 翻译函数没有产生任何错误和任何警告
对于注意 第3条 如果把翻译函数实现改成如下就会出现错误
NSString *NSStringFromE_BZ_TestType(E_BZ_TestType type)
{
switch (type) {
case kE_BZ_TestType_None:
return @"没有";
default:
break;
}
}
那么现在 问题来了:
当在调用代码中 type 不属于枚举中的任何一个的时候,例如type = 100
在使用翻译函数的时候:
DEBUG 模式是: 返回了100字符串
而在 RELEASE模式是 直接崩溃了
所以只能把翻译函数修改如下:
NSString *NSStringFromE_BZ_TestType(E_BZ_TestType type)
{
switch (type) {
case kE_BZ_TestType_None:
return @"没有";
case kE_BZ_TestType_One:
return @"一";
default:
return @"未知";
}
}
这样 就不会出现问题了.
我想这是 Release 模式代码优化导致的结果
iOS enum C方法 DEBUG, RELEASE的隐藏的一个坑的更多相关文章
- iOS关于沙盒文件拷贝manager.copyItem的一个坑
记录一下: 沙盒文件操作,当需要拷贝文件时,我们可以使用如下类似方式: // 文件拷贝 func copyFile(from:String,to:String)->Bool{ if !manag ...
- [iOS开发系列]根据Debug和Release状态的变化来屏蔽日志输出
今天在这里分享一个很实用的小技巧. 我们平时在开发应用的时候,经常会用到NSLog来调试我们的程序,而随着项目越来越大,这些用于调试的日志输出就会变得很难管理. 我们在发布正式版的时候一定要屏蔽掉所有 ...
- iOS调试程序的方法
IOS各种调试技巧豪华套餐 普通操作 如图3 基本的断点操作如下 图4 点击那个黑列列就创建了一个断点,再次点击就临时取消这个断点(但是不删除),长按那个断点拖出去就删除了(mac os的系统工程师就 ...
- iOS常用公共方法
iOS常用公共方法 字数2917 阅读3070 评论45 喜欢236 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat si ...
- Unity3D与iOS消息交互方法(1)--iOS接收Unity3D发出的消息
跨平台这种事情不管多NB, 总要有些与原生系统交互的方法, 比如 Unity3D与iOS消息交互方法. 一: 建立一个空的Unity工程. File --> New Project 二: 编 ...
- iOS 常用公共方法
iOS常用公共方法 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat size = 0.0; NSError *error; N ...
- 你遗忘的都在这里—iOS常用类型方法笔记
这些都是项目中常用但又常忘的方法,与大家分享一下. 一.NSString 创建字符串. NSString *astring = @"This is a String!"; 创建空 ...
- 关于 Enum.TryParse 方法的一个小坑…
今天在测试导入数据的时候,突然发现本应该是枚举内容的数据,导入了进了一个很大的不在枚举定义内的数字. 记得当时用的是 Enum.TryParse 方法对导入的文本进行校验的,于是调试了一下,发现果然是 ...
- iOS获取电量方法
ios简单的方法: [UIDevice currentDevice].batteryMonitoringEnabled = YES; double deviceLevel = [UIDevice cu ...
随机推荐
- AspNet.OData 协议概述
1. 什么是OData? OData 全称 Open Data Protocol,字面理解为开放数据协议,是一个基于Http协议且API实现为Restful风格的协议标准,目前由微软支持大力推广,你可 ...
- iOS 相册和网络图片的存取
iOS 相册和网络图片的存取 保存 UIImage 到相册 UIKit UIKit 中一个古老的方法,Objective-C 的形式 void UIImageWriteToSavedPhotosAlb ...
- LeetCode 84. Largest Rectangle in Histogram 直方图里的最大长方形
原题 Given n non-negative integers representing the histogram's bar height where the width of each bar ...
- 【山东省选2008】郁闷的小J 平衡树Treap
小J是国家图书馆的一位图书管理员,他的工作是管理一个巨大的书架.虽然他很能吃苦耐劳,但是由于这个书架十分巨大,所以他的工作效率总是很低,以致他面临着被解雇的危险,这也正是他所郁闷的.具体说来,书架由N ...
- ajax分页实现(php)
ajax分页实现(php) 使用jquery.pagination.js插件 引入js文件.css文件 <link rel="stylesheet" href="/ ...
- mysql 中文出现?,设置utf8
windows系统下的mysql: 1.找到mysql的配置文件:文件名可能不是my.ini(如my-default.ini),修改成my.ini. 打开配置文件,并编辑如下:(若是没有[client ...
- python中的一些小知识
在最近学习python中遇到的一些小问题汇总一下: 1.在windows7下安装python3.5版本时提示安装不了,缺少ServicePack1. 解决办法是,打开控制面板\系统和安全\Windo ...
- HttpClient和 HtmlParser实现爬虫
网络爬虫技术 1 什么叫网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不 ...
- 2017最新修复福运来完整运营中时时彩源码PC+手机版本功能齐全
QQ:1395239152 2017-3.14最新修复福运来完整运营版时时彩源码PC+手机版本功能齐全 使用php+mysql开发,并带有完整数据库.截图!!! 注意哈 带手机版 以下截图均为测 ...
- vue之nextTick全面解析
vue的第一篇文章,介绍一下简单的nextTick方法的实现原理 简介 vue是非常流行的框架,他结合了angular和react的优点,从而形成了一个轻量级的易上手的具有双向数据绑定特性的mvvm框 ...