静态变量是在编译时静态分配的变量。我怀疑是某些变量是静态声明的?到目前为止,我的代码中没有使用任何静态变量。来自苹果代码http://developer.apple.com/library/ios/#samplecode/CryptoExercise/Introduction/Intro.html 在securityWrapper.m中,有一行
static SecKeyWrapper * __sharedKeyWrapper = nil;
在这里静态分配__sharedKeyWrapper有什么用?
我在很多代码中看到过使用静态关键字。所以请在静态关键字时解释一下使用和好处。
提前致谢。
答案 0 :(得分:1)
定义新的对象类时,可以决定实例 他们应该拥有的变量。该类的每个实例都有它的 您声明的所有变量的自有副本;每个对象控制自己的 数据
但是,你不能为类对象规定变量;有 没有"类变量"实例变量的对应物。只有内部 提供了从类定义初始化的数据结构 班级。类对象也无权访问实例变量 任何情况;它不能初始化,读取或改变它们。
因此,对于一个类的所有实例来共享数据,一个外部的 某种变量是必需的。有些类声明了静态变量 并提供管理它们的类方法。 (声明变量static 在与类定义相同的文件中,将其范围限制为仅限于 class - 以及仅在文件中实现的类的一部分。 与实例变量不同,静态变量不能被继承 子类。)
静态变量有助于为类对象提供更多功能 一个"工厂"产生实例;它可以成为一个 完整而多功能的物体本身。一个类对象可以 用于协调它创建的实例,从中分配实例 已创建的对象列表,或管理其中必不可少的其他进程 应用程序。在你只需要一个对象的情况下 特殊的类,你可以将所有对象的状态置于静态 变量并仅使用类方法。这节省了分配步骤 并初始化一个实例。
答案 1 :(得分:1)
该文件全局为singleton,用于共享类的实例。
它在Objective-C中是静态的原因是internal linkage。实际上,这意味着变量不能在声明它的文件之外看到。如果另一个文件声明了一个具有相同名称的变量,它们就是两个不同的变量。
请记住,Objective-C实例的工作方式,实际上不会自动分配实例。相反,你有一个指向实例的指针。代码仍然需要执行以下操作:
if ( !_sharedKeyWrapper ) {
_sharedKeyWrapper = [[SecKeyWraper alloc] initBlahBlah];
}
请参阅链接了解更多信息。
答案 2 :(得分:0)
静态变量也初始化一次。您可以在递归调用中使用静态变量。简单的例子析因。