用于立即分配varible的块的运行时开销

时间:2016-03-24 16:48:31

标签: ios objective-c performance objective-c-blocks

我喜欢这段代码的结构。

NSString *source = ^{
    switch ([picker sourceType]) {
        case UIImagePickerControllerSourceTypeCamera:
            return @"camera";
        case UIImagePickerControllerSourceTypePhotoLibrary:
        case UIImagePickerControllerSourceTypeSavedPhotosAlbum:
            return @"library";
    }
}();

如果你向枚举添加一个新案例并在这里忘记它,它会强制编译器抛出错误。 这段代码不会

NSString *source = nil;
switch ([picker sourceType]) {
    case UIImagePickerControllerSourceTypeCamera:
        source = @"camera";
        break;
    case UIImagePickerControllerSourceTypePhotoLibrary:
    case UIImagePickerControllerSourceTypeSavedPhotosAlbum:
        source = @"library";
        break;
}

我不知道块方法的成本有多高。 ¿有谁知道这个的开销?

1 个答案:

答案 0 :(得分:1)

您的代码严重破坏。你似乎在Swift和Objective-C之间感到困惑。您的问题是您在第二个代码中忘记了break语句。不要将完整的代码与破碎的代码进行比较。修复第二个示例,然后检查在添加枚举值时是否确实没有给出错误。