gpt4 book ai didi

ios - 有没有比 dispatch_once 更短的替代方案?

转载 作者:行者123 更新时间:2023-11-28 22:10:45 25 4
gpt4 key购买 nike

有没有更短的版本?感觉像很多样板。

我举了几个我认为很乏味的例子

+ (instancetype)sharedInstance
{
static dispatch_once_t onceToken;
static id instance;
dispatch_once(&onceToken, ^{
instance = [self new];
});
return instance;
}

+ (NSString *)RFC2822StringFromDate:(NSDate *)date
{
static NSDateFormatter *formatter;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
formatter = [NSDateFormatter new];
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
formatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
formatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss Z";
});

return [formatter stringFromDate:date];
}

最佳答案

我刚刚做了一个小宏,基本上可以让你写很短的东西

+ (instancetype)sharedInstance
{
return dispatch_once_and_return(id, [self new]);
}

此语义也支持 block

+ (NSString *)altRFC2822StringFromDate:(NSDate *)date
{
NSDateFormatter *formatter = dispatch_once_and_return(NSDateFormatter *, ^{
NSDateFormatter *f = [NSDateFormatter new];
// setup formatter
return f;
}());

return [formatter stringFromDate:date];
}

(诀窍是在 block 后添加(),基本上立即执行 block )。

#define dispatch_once_and_return(type, value) ({\
static type cachedValue;\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
cachedValue = value;\
});\
cachedValue;\
})

关于ios - 有没有比 dispatch_once 更短的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22984775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com