2012-02-01 204 views
0

静态变量是在编译时静态分配的变量。我怀疑是为了什么目的,某些变量是静态声明的?直到现在,我还没有在代码中使用任何静态变量。从securityWrapper.m苹果代码http://developer.apple.com/library/ios/#samplecode/CryptoExercise/Introduction/Intro.html ,有一条线ObjectiveC中的静态变量

static SecKeyWrapper * __sharedKeyWrapper = nil; 

什么用的静态分配__sharedKeyWrapper这里?

我看过在这么多代码中使用静态关键字。所以请好好解释静态关键字的用法和好处。

在此先感谢。

回答

1

全局文件是singleton,用于共享类的一个实例。

它在Objective-C中是静态的原因是internal linkage。实际上,这意味着变量不能在它声明的文件之外被看到。如果另一个文件声明了一个具有相同名称的变量,它们是两个不同的变量。

请记住,Objective-C实例的工作方式,实例实际上不会自动分配。相反,你有一个指向实例的指针。该代码仍然需要做类似:

if (!_sharedKeyWrapper) { 
    _sharedKeyWrapper = [[SecKeyWraper alloc] initBlahBlah]; 
} 

查看更多链接。

1

当你定义一个新的对象类时,你可以决定他们应该有什么实例 变量。该类的每个实例都将拥有您声明的所有变量的 自己的副本;每个对象都控制着自己的 数据。

但是,你不能规定类对象的变量;有 没有与实例变量相对应的“类变量”。只有内部的 数据结构,从类定义初始化,为 类提供。类对象也不能访问任何实例的实例变量 ;它不能初始化,读取或修改它们。

因此,对于一个类的所有实例来共享数据,需要某种外部 变量。某些类声明静态变量 并提供用于管理它们的类方法。 (声明一个变量static 与类定义在同一个文件中,将其范围限制为仅仅是 类 - 仅仅是文件中实现的类的一部分 与实例变量不同,静态变量不能被)

静态变量帮助给类对象更多的功能,而不仅仅是产生实例的“工厂”的功能的 ;它可以靠自己的方式成为完整和多功能的对象。类对象可以是 ,用于协调它创建的实例,分配来自 的实例已创建的对象列表,或者管理对应用程序至关重要的其他进程。在只需要一个特定类的一个对象的情况下,可以将所有对象的状态置于静态变量 中,并且只使用类方法。这节省了分配 并初始化实例的步骤。

0

静态变量也被初始化一次。您可以在递归调用中使用静态变量。简单的例子因子。