小编eno*_*tia的帖子

如何正确处理UnsafeMutablePointer

我有点困惑.什么时候我必须免费拨打电话和/ dealloc?我正在研究一个学习核心音频的简短代码片段.我想如果我打电话 UnsafeMutablePointer<Type>.alloc(size)那么我应该打电话给destroy&dealloc.但如果我使用malloc()calloc()我应该打电话free().

在这个来自Learning Core Audio的示例中,以下代码片段让我想知道:

var asbds = UnsafeMutablePointer<AudioStreamBasicDescription>.alloc(Int(infoSize))
audioErr = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AvailableStreamDescriptionsForFormat,
                              UInt32(sizeof(fileTypeAndFormat.dynamicType)), &fileTypeAndFormat,
                              &infoSize, asbds)
Run Code Online (Sandbox Code Playgroud)

我在这里使用alloc.free调用释放内存.

free(asbds)
Run Code Online (Sandbox Code Playgroud)

但为什么不呢

asbds.destroy(Int(infoSize))
asbds.dealloc(Int(infoSize))
Run Code Online (Sandbox Code Playgroud)

我希望遵循规则.

我会感激任何帮助,因为这让我头晕目眩.文档说我负责销毁和dealloc,以便部分清晰,但是以哪种方式?

c memory core-audio swift

7
推荐指数
1
解决办法
819
查看次数

具有相关值的swift枚举中的等于运算符重载

我知道之前有一个几乎类似的问题,但是我无法对此发表评论,因为我是新来的.这就是我发布分离问题的原因.此外,我的问题是对上一个问题的扩展,旨在提供更一般的解决方案.这是前一个问题的链接:如何测试Swift枚举与相关值的相等性

我想在枚举中测试相关值的相等性:

enum MyEnum {
    case None
    case Error
    case Function(Int) // it is a custom type but for briefness an Int here
    case ...
}
Run Code Online (Sandbox Code Playgroud)

我试着设置一个重载函数,如下所示

func ==(a: MyEnum, b: MyEnum) -> Bool {
    switch (a,b) {
    case (.Function(let aa), .Function(let bb)):
        if (aa==bb) {
            return true
        } else {
            return false
        }
    default:
        if (a == b) {
            return true
        } else {
            return false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这不会产生编译时错误,但在运行过程中会因bad_exec而失败.很可能是因为在默认情况下测试a == b,再次调用函数本身..Function部分按预期工作,但不是其余的...所以案例列表有点长,我如何测试与它们没有相关值的案例是否相等?

enums equality operator-overloading swift

6
推荐指数
1
解决办法
1198
查看次数

标签 统计

swift ×2

c ×1

core-audio ×1

enums ×1

equality ×1

memory ×1

operator-overloading ×1