正确定义Objective-C常量
2015-07-03 18:50
489 查看
正确定义Objective-C常量
本文由 Migrant 翻译自 CorrectWay of Defining Constants in Objective-C,转载请注明出处。
本文只是一个关于如何在Cocoa代码中定义常量的书签贴,答案来自于stackoverflow.com的这个问题。这里为那些懒人提供了一些简短的介绍和帖子本身。你可能读遍了苹果开发者文档,知道一些特定的方法参数只能接受定义为常量的枚举值列表。比如事件类型标记(
NSKeyUpMask,
NSKeyDownMask,等等),persistent
store coordinator的存储类型(
NSSQLiteStoreType,
NSBinaryStoreType和
NSInMemoryStoreType),当然还有很多其他的。所有的这些归结为几行代码。实际上定义常量的时候代码行数是你想要的常量的两倍。步骤为:首先,创建
Constants.h和
Constants.m文件用来存放我们的常量。在
Constants.h中,指定常量名字,将常量声明为一个指向
NSString对象的指针:
<span class="line-number" style="margin:0px; padding:0px">1</span> <span class="line-number" style="margin:0px; padding:0px">2</span> <span class="line-number" style="margin:0px; padding:0px">3</span> | // Constants.h extern NSString * const MyOwnConstant; extern NSString * const YetAnotherConstant; |
Constants.m中通过赋值定义常量:
<span class="line-number" style="margin:0px; padding:0px">1</span> <span class="line-number" style="margin:0px; padding:0px">2</span> <span class="line-number" style="margin:0px; padding:0px">3</span> | // Constants.m NSString * const MyOwnConstant = @"myOwnConstant"; NSString * const YetAnotherConstant = @"yetAnotherConstant"; |
Constants.h文件到你工程的预编译头文件。如果你有点小聪明,可能脑中会有两个问题。第一个问题或许是:在能够使用
#define的情况下为什么要使用这种方法?这是个非常有意义的问题。答案很简单(但是在读到这个答案之前还不是很明显)
— 使用这种方法你可以进行指针比较(
@"myString" == MyConstant)而不是字符串比较(
[@"myString" isEqualToString:MyConstant])。前者非常非常快。第二个问题应该是为什么应该完全使用常量。又一个有意义的问题。你可以在每个使用常量的地方使用常量对应的值。但是有两个”但是”。第一,始终有人的因素。你很容易输入错字符串,而编译器并不会抱怨你的语法。但如果使用常量,它就会在你输入错常量名称的时候给予你警告。还有(第二个”但是”),XCode会尽最大努力的帮助我们自动完成代码,这些常量也不例外,因此方法会变得非常方便。Happy coding!
如有c或者c++混合的话使用FOUNDATION_EXPORT 来代替 extern
相关文章推荐
- Objective-C(十、NSRange,point,size,rect,NSNumber,NSValue,NSNull)——iOS开发基础
- Objective C多态
- [Objective-C] .m文件不能编译C++代码的问题
- 所闻所获1:动画效果的进度球(水面上升、水面涌动)
- Android 属性动画ObjectAnimator和ValueAnimator讲解
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第八章 继承
- [Objective-C] 复写NSObject的description方法
- Objective-C分类 (category)和扩展(Extension)
- Objective-C(九、Foundation框架和NSObject类)——iOS开发基础
- objective-c 中new与alloc/init的区别
- swift对比object-c
- 'dict' object has no attribute 'resolve'
- Objective-C 之 NSNotificationCenter vs delegate vs KVO
- Java中JNI的使用详解第二篇:JNIEnv类型和jobject类型的解释
- 【Effective Objective-C 2.0读书笔记】第四章:协议和分类
- Jackson框架提供的JsonGenerator ObjectMapper以及JSONObject 、JSONArray学习
- Objective C中数组排序几种情况的总结
- object-c 入门基础篇
- SSH Object类型转换
- objective-c中property 的属性strong,weak, retain, copy