Joe*_*oey 10 static objective-c initializer
如何在objective-c中创建静态初始化器(如果我有正确的术语).基本上我想做这样的事情:
static NSString* gTexts[] =
{
@"A string.",
@"Another string.",
}
Run Code Online (Sandbox Code Playgroud)
但是我想要更像struct这样做,即不仅仅为这个数组中的每个元素都有一个NSString,而是一个NSString加一个NSArray,它包含一个可变数量的MyObjectType,其中MyObjectType将包含一个NSString,一对int,等等.
Dav*_*ong 15
由于NSArrays和MyObjectTypes是堆分配的对象,因此无法在静态上下文中创建它们.您可以声明变量,然后在方法中初始化它们.
所以你做不到:
static NSArray *myStaticArray = [[NSArray alloc] init....];
Run Code Online (Sandbox Code Playgroud)
相反,你必须做:
static NSArray *myStaticArray = nil;
- (void) someMethod {
if (myStaticArray == nil) {
myStaticArray = [[NSArray alloc] init...];
}
}
Run Code Online (Sandbox Code Playgroud)
这恰好适用于常量字符串(@"foo"等),因为它们不是堆分配的.它们被硬编码到二进制文件中.
确保静态初始化是线程安全的(在iOS 4.1 +中可用)非常重要!
static NSArray *myStaticArray = nil;
- (void) someMethod {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
myStaticArray = [[NSArray alloc] init...]
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7726 次 |
| 最近记录: |