黑马程序员 ---类中定义常量
来源:互联网 发布:全国青少网络文明公约 编辑:程序博客网 时间:2024/06/05 05:37
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
我今天在写程序时,我的类需要一个常量。比如一个person类,我需要定义一个常量g来说明人的成年年龄,老师教的都只能创建对象的成员变量,所有成员变量都是在对象初始化后才有值的,否者都是零,我不想再init方法中写一行代码来设置g为18.有没有其他方法呢?我想不用init,g就是20的那种方法。
查了资料发现,可以在类的定义文件,就是实现implementation的那个.m文件中,定义变量。
因为类的实现文件不会被任何代码import,所以这些变量其他文件是访问不到的,他们的作用域只是这个类的实现中。
这就弥补了oc中,类没法创建常量的尴尬。
const int g = 20;//这里定义的变量只能在这个文件访问,换句话说,只能是这个类访问它。@implementation XXXX@end
在《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》中有一条多用类型常量,少用#define预处理指令
我觉得这条建议是很不错的。
static const NSTimeInterval kAnimationDuration = 0.3;
const关键字防止变量被修改,static关键字使这个变量只能在这个.m文件中有效,别的模块是访问不到它的。
假如声明此变量时不加static,则编译器会为它创建一个“外部符号”(external symbol)。此时若是另一个编译单元中也声明了同名变量,那么编译器就抛出一条错误消息:
如果想创建能被别的文件访问的常量,此类常量需放在“全局符号表”(global symbol table)中,以便可以在定义该常量的编译单元之外使用。因此,其定义方式与上例演示的static const有所不同。应该这样来定义:
- duplicate symbol _kAnimationDuration in:
- EOCAnimatedView.o
- EOCOtherView.o
这个常量在头文件中“声明”,且在实现文件中“定义”。注意const修饰符在常量类型中的位置。常量定义应从右至左解读,所以在本例中,EOCStringConstant就是“一个常量,而这个常量是指针,指向NSString对象”。这与需求相符:我们不希望有人改变此指针常量,使其指向另一个NSString对象。
- // In the header file
- extern NSString *const EOCStringConstant;
- // In the implementation file
- NSString *const EOCStringConstant = @"VALUE";
编译器看到头文件中的extern关键字,就能明白如何在引入此头文件的代码中处理该常量了。这个关键字是要告诉编译器,在全局符号表中将会有一个名叫EOCStringConstant的符号。也就是说,编译器无须查看其定义,即允许代码使用此常量。因为它知道,当链接成二进制文件之后,肯定能找到这个常量。
总之就是用常量,而不用#define
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
- 黑马程序员 ---类中定义常量
- 类中定义常量
- 类中定义常量
- C++类中定义常量
- 在类中定义常量
- C++类中定义常量
- 黑马程序员-类的定义
- 如何在类中定义常量?
- 在类中定义常量的方法
- c++类中如何定义常量
- VC类中定义静态常量
- C++ 类中定义常量的方法
- c++类中如何定义常量
- java中定义常量
- java中定义常量
- java中定义常量
- java中定义常量
- java中定义常量
- 世界电影史--笔记
- 欢迎使用CSDN-markdown编辑器
- 在PHP模板引擎smarty生成随机数的方法和math函数详解
- IOS——使用PresentViewController推送页面,各页面间跳转及遇到的问题
- 细说跨越速运的限时服务
- 黑马程序员 ---类中定义常量
- 浅谈抓取session信息脚本
- Zxing的源码结构梳理
- 安卓ImageLoader
- Linux初学,利用管道文件进行通信,实现3个人之间的群聊
- csdn~
- 趣谈HTTP协议中的那些MIME header
- 关于画板项目的一点认识
- 创建自己的gem并上传到github