Can class可以在objective-c中包含静态对象
答
他们肯定能!在.m文件的实现块外声明静态变量。我在创建单身人士时一直这样做。
--- MySingleton.h ---
@interface MySingleton : NSObject
...
@end
--- MySingleton.m ---
#include "MySingleton.h"
static MySingleton *sharedSingleton = nil
@implementation
...
@end
答
添加到答案,你已经有 - 是的,你可以。
可以通过将静态变量放在实现块之外来让静态变量对类的所有对象都可见。
通过在方法中声明静态变量,可以使静态变量仅在类的所有对象的方法中可见。如果你想看到这样的一个例子,看看由Xcode中生成的表数据源的方法tableView:cellForRowAtIndexPath:
顶部的样板通常有类似的声明:
static NSString *cellIdentifier = @"cellIdentifier";
这是一个静态方法,但它只能在该方法中用于该类的其他对象。这给你两件事。首先 - 为一个固定项目提供单个商店的内存使用效率稍高一些。其次 - 封装是通过只有在使用该变量的方法中可见的便利变量来维护的。
答
除了Eytan的回答:实例化sharedSingleton
的好地方是类初始化方法。这会在您的课程在运行时发送第一条消息(例如alloc
)之前被调用一次。
例如:
static MySingleton *sharedSingleton = nil;
@implementation YourClass
+(void) initialize // Note the plus sign!
{
if (!sharedSingleton)
shardSingleton = [[MySingleton alloc] init];
}
// etc.
@end