Static浅析(C++/objective-C)

1. 类中的Static 

分类:静态成员函数、静态成员变量

主要把握的地方:都是类的静态成员,不是对象成员,属于类,不属于某个对象。类的很多实例共享静态的函数或者成员。引用的时候使用类名。 

使用方式:静态的成员函数只能访问类中的静态变量,而不能访问非静态变量(原因是静态成员函数没有了隐含的 his指针)。如果非要引用,通过对象来引用。

优点:使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只 要对静态数据成员的值更新一次,就可以保证所有对象都能够访问到被更新后的值,这样可以提高效率和节省内存空间。在类中声明了静态变量,无论用户使用使用这个类,而这个静态变量都会申请他需 要的内存容量。对于多线程的情况下,访问静态变量我们需要加一些异步机制,防止多个线程同时修改静态变量。


2.类外的Static

分类:静态全局变量和静态全局函数

主要把握的地方:一个函数用Static修饰过后,只能在这个文件范围内使用,对其他文件隐藏(好处,避免重名,可以在N个类中调用同一个名字的函数(PS:功能不同))。

使用方式:建议全局静态函数不要使用,放到类中去(否则是C的方法,破坏了封装性)。


和C++不同,Object-C中不支持类的静态成员变量,通常的做法是在Class的外面定义个静态变量来使用


静态变量的存储:按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。


静态变量的作用域:按作用域分,全局变量在整个工程文件内都有效;静态全局就量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。


静态全局变量,只在本文件可以用,虽然整个程序包含多个文件,但静态全局变量只能用在定义它的那个文件里,却不能用在程序中的其他文件里。它是定义存储因型为静态型的外部变量,其作用域是从定义点到程序结束,所不同的是存储类型决定了存储地点,静态型变量是存放在内存的数据区中的,它们在程序开始运行前就分配了固定的字节,在程序运行过程中被分配的字节大小是不改变的,只有程序运行结束后,才释放所占用的内存。

例子:

C++中的单例模式:


OBC中的单例模式:



你可能感兴趣的:(Static浅析(C++/objective-C))