我想只有在当前设备的iOS版本低于特定版本运行一段代码,作为指定在这里.Apple给出的代码示例如下所示:
if (@available(iOS 10.0, *)) {
// iOS 10.0 and above
} else {
// below 10.0
}
Run Code Online (Sandbox Code Playgroud)
但是,有些情况下,只有当前iOS版本低于特定版本时,才会运行代码.我假设以下代码将起作用:
if (!@available(iOS 10.0, *)) {
// below 10.0
}
Run Code Online (Sandbox Code Playgroud)
但似乎这不起作用,我从Xcode收到以下警告:
@available does not guard availability here; use if (@available) instead
Run Code Online (Sandbox Code Playgroud)
这是添加了我所看到的诊断的LLVM提交.
该问题有两种可能的后备:
if-else
变体而不向if
块添加任何代码(不是很优雅).-[NSProcessInfo isOperatingSystemAtLeastVersion:]
.还有另一种使用@available
我想要的方法吗?
直到几天前,以下URL处理程序重定向用户赠送应用程序:
static NSString * const kAppStoreGiftURL = @"itms-appss://buy.itunes.apple.com/"
"WebObjects/MZFinance.woa/wa/giftSongsWizard"
"?gift=1&salableAdamId=%u&productType=C&pricingParameter=STDQ&mt=8&ign-mscache=1";
NSString *url = [NSString stringWithFormat:kAppStoreGiftURL, kAppID];
NSLog(@"Opening store with URL: %@", url);
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
Run Code Online (Sandbox Code Playgroud)
但是,似乎现在这会产生以下错误消息openURL
:
仍可通过商店直接赠送应用程序.
Apple是否完全禁用了此功能,或者是否有新的URL可以缓解此问题?
我正在使用OpenCV和cv::Mat
对象,我需要知道我的矩阵占用的字节数,以便将它传递给低级C API.似乎OpenCV的API没有返回矩阵使用的字节数的方法,并且我只有一个原始uchar *data
公共成员,没有包含其实际大小的成员.
如何找到cv::Mat
以字节为单位的大小?
我正在尝试使用ImageIO以HEIC文件格式保存图像.代码看起来像这样:
NSMutableData *imageData = [NSMutableData data];
CGImageDestinationRef destination = CGImageDestinationCreateWithData(
(__bridge CFMutableDataRef)imageData,
(__bridge CFStringRef)AVFileTypeHEIC, 1, NULL);
if (!destination) {
NSLog(@"Image destination is nil");
return;
}
// image is a CGImageRef to compress.
CGImageDestinationAddImage(destination, image, NULL);
BOOL success = CGImageDestinationFinalize(destination);
if (!success) {
NSLog(@"Failed writing the image");
return;
}
Run Code Online (Sandbox Code Playgroud)
这适用于具有A10的设备,但在旧设备和模拟器(也是根据Apple)上失败,因为未能初始化destination
和错误消息findWriterForType:140: unsupported file format 'public.heic'
.我找不到任何直接的方法来测试硬件是否支持HEIC而不初始化新的图像目的地并测试可空性.
有基于AVFoundation的API用于检查是否可以使用HEIC保存照片,例如使用-[AVCapturePhotoOutput supportedPhotoCodecTypesForFileType:]
,但我不想为此初始化和配置捕获会话.
有没有更直接的方法来查看硬件是否支持这种编码类型?
从C ++ 11开始,static
已知本地变量将以线程安全的方式初始化(除非-fno-threadsafe-statics
给出),如本问题所述。这是否意味着以下众所周知的模式:
+ (NSObject *)onlyOnce {
static NSObject *object;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
object = [[NSObject alloc] init];
});
return object;
}
Run Code Online (Sandbox Code Playgroud)
可以替换为更短的:
+ (NSObject *)onlyOnce {
static NSObject *object = [[NSObject alloc] init];
return object;
}
Run Code Online (Sandbox Code Playgroud)
使用C ++ 11和更高版本的C ++语言方言将代码编译为Objective-C ++时?
我正在运行以下代码:
for (int i = 0; i < 100; ++i) {
NSDate *date = [NSDate date];
NSTimeInterval interval = date.timeIntervalSince1970;
NSDate *newDate = [NSDate dateWithTimeIntervalSince1970:interval];
if (![date isEqualToDate:newDate]) {
NSLog(@"Not equal!");
}
}
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,在许多迭代中,日期彼此并不相等。怎么可能?