Objective-C安全铸造宏
发布时间:2020-12-16 05:50:50 所属栏目:百科 来源:网络整理
导读:我在Objective-C中编写了一个宏来执行安全转换.这是迄今为止的样子: #define SAFE_CAST(OBJECT,TYPE) ([OBJECT isKindOfClass:[TYPE class]] ? (TYPE *) OBJECT: nil) 这非常有效,但是如果有一种方法可以将OBJECT存储在一个变量中,那么它就不会被调用两次.
我在Objective-C中编写了一个宏来执行安全转换.这是迄今为止的样子:
#define SAFE_CAST(OBJECT,TYPE) ([OBJECT isKindOfClass:[TYPE class]] ? (TYPE *) OBJECT: nil) 这非常有效,但是如果有一种方法可以将OBJECT存储在一个变量中,那么它就不会被调用两次.例如,使用宏如此: NSString *str = SAFE_CAST([dictinary objectForKey:key],NSString); 扩展宏时导致代码与此类似: NSString *str = ([[dictinary objectForKey:key] isKindOfClass:[NSString class]] ? (NSString *) [dictinary objectForKey:key]: nil); 我更喜欢它更像这样工作: id obj = [dictionary objectForKey:key]; NSString *str = ([obj objectForKey:key] isKindOfClass[NSString class]] ? (NSString *) obj : nil); 谢谢. 解决方法
您可以使用名为语句
statement expressions的GCC扩展
#define SAFE_CAST(OBJECT,TYPE) ({ id obj=OBJECT;[obj isKindOfClass:[TYPE class]] ? (TYPE *) obj: nil; }) 也就是说,我认为这种情况通常是一种糟糕的方法,你需要经常使用SAFE_CAST.切勿将不同类的对象放在数组中;永远不要重复使用动作消息(IBAction)someAction:(id)sender来表示不同类的UI对象.那么您通常不需要使用SAFE_CAST. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何保持Oracle数据库SQL性能的稳定性
- 有没有一种快速的方法来构建和安装到iPhone(从Xcode),而无需
- ajax 提交数组参数
- ruby-on-rails-4 – 设计更改电子邮件不会更新电子邮件
- flex – 错误#3219 AIR中的NativeProcess
- React Native 如何愉快地调试一个 React Native for Androi
- 【React Native开发】React Native控件之ProgressBarAndroi
- cocoStudio:ScrollView控件使用记录
- 如何使用ajax开发web应用程序[2]
- VB编程:有5、6、8、9四个数字,能够组成多少个互不相同且无重