小编sim*_*one的帖子

UnsafeRawPointer assumeMemoryBound vs. bindMemory

任何人都可以解释UnsafeRawPointer.assumimgMemoryBound(to:)和之间的区别是什么UnsafeRawPointer.bindMemory(to:capacity:)

编译或运行时差的一个实际例子将更受欢迎.

Swift DocbindMemory(to:capacity:):

此API允许内存区域在程序中的不同点保存不相关的类型.将未初始化的内存绑定到类型会使内存准备存储该类型的值.已初始化的绑定内存将内存中的值重新解释为新类型.如果旧值非常重要(需要销毁)或者在被覆盖之前从内存中读取它们,则新类型必须与旧类型相互布局兼容.

是什么意思将未初始化的内存绑定到类型准备内存来存储该类型的值?它分配了字节,对吧?那么bindMemory(to:capacity:)完成后有什么不同?

memory pointers swift

11
推荐指数
1
解决办法
719
查看次数

Xcode和ARC调试问题(跳过dealloc)

我花了一些时间来调试ARC和自定义dealloc函数的一个奇怪的问题.

  1. 我是继承NSOperation类的
  2. 我为此操作设置了完成块
  3. 该操作由非常扁平的对象(没有方法,自动ivars,两个强属性)的强属性引用,可以调用此对象DataRequest
  4. 遵循所有准则,完成块仅使用对本地对象的弱引用(包括操作本身)
  5. 编译器和分析器都不会产生任何问题
  6. DataRequest保持对我生成的操作的唯一引用,并在操作完成块中销毁.它总是被破坏(它dealloc总是被执行)
  7. 我的操作有一个习惯dealloc.我只有一个NSLog调用.

......问题是:

如果我在调试器中运行它,dealloc中的断点永远不会被命中,日志消息永远不会出现.主要是我以为操作漏了.

如果我在仪器中运行它,一切都很好,系统控制台打印消息,Allocations仪器报告从正确的堆栈快照中释放的操作,包括自定义dealloc.没有检测到泄漏.

我100%确定我使用相同的编译器设置进行调试和分析.

最后最令人困惑的事情:如果我创建了一个自定义版本[DataRequest dealloc]并且我付诸实践self.operation = nil;- 即使从调试器中也可以正常工作.

有没有人提示某些编译器链接器选项试图看到一些区别?这可能是Apple工具中的错误(我们所有人都在为我们自己的错误指责一条大鱼,对吧?)

......是的,我尝试过使用GDB和LLDB.结果是一样的 - 可能表明什么.

我试图创建一个简约的样本,但它只是工作(确实);)

谢谢

debugging xcode instruments dealloc automatic-ref-counting

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

Swift字符串和整数下标

这是一个理论问题

为什么以下(以及更多类比)不是Swift标准库的一部分?什么是坏情况

extension String {
    subscript(_ range: Range<Int>) -> Substring {
        return self[index(startIndex, offsetBy: range.lowerBound)..<index(startIndex, offsetBy: range.upperBound)]
    }
}

extension Substring {
    subscript(_ range: Range<Int>) -> Substring {
        return self[index(startIndex, offsetBy: range.lowerBound)..<index(startIndex, offsetBy: range.upperBound)]
    }
}
Run Code Online (Sandbox Code Playgroud)

string swift swift4

2
推荐指数
1
解决办法
458
查看次数