前言
接下来可能还有一些文章,应该都是根据面试总结的答案,文章很好,值得学习。
基本都是oc部分的,只能怪自己太懒散,靠这种笔记来督促自己学习吧。
做iOS,是因为公司因为项目需要想让我转,说实话一开始一窍不通。最早看到同事写的#define,只能明白是宏定义,后来发现宏定义也很有学问。每次看到介绍OC都会有提到c和c++,由此又会有许多相关的知识,不要抱怨知识太多学不完,看以前能留下来的c或c++的代码会发现以前的码农们的智慧,敬畏前辈吧。
第一部分
const
const的应用在c++中应该是经常用到,代表不可变,看到Eric_Jo09年写的const,现在依然受益匪浅。
首先,要明白,const是一个修饰符。当const出现的时候,原有的声明代码不会减少什么,就比如帅气的作者遛着狗,const就代表帅气,不能因为帅气的修饰作者会失去原有的基本设定,当然也可以这样说帅气的作者遛着帅气的狗,本意还是作者遛着狗,只不过少了修饰。明白了这点下面的就好理解了
char* const Acontent;
const char *Bcontent;
const char* const Ccontent;
简单的三个写法:
1、修饰指针本身,表示指针本身是常量不可变
2、修饰指针的指向,表示指针指向常量
3、以上两者结合,表示常量指针指向常量
可以以*****为分割,const在**左边代表修饰指针指向的为常量,const在右边代表指针本身为常量。
static
static用在全局变量时代表变量仅在本文件中有效,外部无法使用。如果想在外部使用可以使用extern。
define
常见变量定义写法
#######define MONTH 12
#######define 常量名 代替值
这是预处理代码,在代码编译前在整个代码中进行一次替换
第二部分
说实话const static和define每一个都可以讲很多,我这水平也不可能讲这么多,下面总结自《编写高质量iOS与OS X代码的52个有效方法》中的第一章第4条。
这段的基调呢就是多用类型常量,少用define。
大体有以下几个原因
1、 define 采用的变量名无类型信息,static const带着类型信息,由此语义更明了。
2、 如果在a文件中使用的static,在a被引用的文件中,define定义的变量名都会被替换,static不会。
3、采用类型变量可以在想暴露的时候暴露比如:
.h
extern NSString *const testString;
.m
NSString *const testString = @"kukukuku";
可以将testString暴露,在引用时可以使用。(此处const代表,禁止修改testString指针的指向)
同时不能省略static,如果如果省略,如下写法,如果在两个不同的文件中写了同样的常量名会报错如下:
NSString *const testString = @"kukukuku";
duplicate symbol _testString in:
/Users/larkdata/Library/Developer/Xcode/DerivedData/textview-hcrilhoybkwnwghilgqurdgcdvlh/Build/Intermediates/textview.build/Debug-iphonesimulator/textview.build/Objects-normal/x86_64/Test1ViewController.o
/Users/larkdata/Library/Developer/Xcode/DerivedData/textview-hcrilhoybkwnwghilgqurdgcdvlh/Build/Intermediates/textview.build/Debug-iphonesimulator/textview.build/Objects-normal/x86_64/ViewController.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
第三部分
看到上文提到的民间大牛Eric_Jo的文章中总结的一个图表实在好,就整理过来吧。应该说static,const,define都是在C++中用到的,道理相通。
没办法这个简书表格不会弄只能手打然后截图了
参考文章
[http://www.jianshu.com/p/403ee06a584e]
[http://blog.csdn.net/Eric_Jo/article/details/4138548]
《编写高质量iOS与OS X代码的52个有效方法》