相关疑难解决方法(0)

为什么Swift中没有通用的基类?

文件说

注意

Swift类不从通用基类继承.您定义的类而不指定超类会自动成为您构建的基类."

摘录自:Apple Inc." Swift编程语言."iBooks.

这对我来说没什么意义.Objective-C有一个普遍的基类是有原因的,同样的理由应该适用于Swift,是吗?NSObject管理保留/释放语义,对默认的实现isEqual:,hashdescription.所有这些功能也可以在Swift中使用.

(Objective-C和Swift使用相同的运行时...)

那么,那是什么呢?没有定义超类的Swift类是否NSObject构成了引擎盖下的正确根类?或者是每个新的根类重复的默认对象行为?或者他们创建了另一个Swift-baseclass?实现retainrelease非常复杂,因为它需要同时考虑多线程和弱引用.

在Swift中是否存在通用基类(尽管文档中有说明)?这将非常方便,因为在Objective-C中,我可以编写扩展,让我将方法调用合并到主runloop,就像[obj.eventually updateCounter]可以读作" -updateCounter下次主runloop控制时调用.如果,同时,我再次调用这个方法,它应该只被调用一次.使用这个扩展可以实现-[UIView setNeedsDisplay],[self.eventually display];如果没有通用基类(或者它是,谁知道?),这在Swift中不再可能.

swift

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

Swift,Strings和Memory地址

有一些我不了解Swift如何管理内存地址 String(s)

1.参考类型

这里fooboo是2个指针指向相同的内存位置.

class Foo { }

let foo = Foo()
let boo = foo

unsafeAddressOf(foo) // "UnsafePointer(0x7FCD13719BE0)"
unsafeAddressOf(boo) // "UnsafePointer(0x7FCD13719BE0)" 
Run Code Online (Sandbox Code Playgroud)

好.

2.价值类型

let word0 = "hello"
let word1 = word0
Run Code Online (Sandbox Code Playgroud)

现在,word0word1value types但这里的copy on write机制是参与.

[...]但是,当绝对必要时,Swift仅在幕后执行实际复制.Swift管理所有值复制以确保最佳性能,您不应该避免分配以尝试抢占此优化.https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_134

那他们为什么有2个不同的内存地址呢?

unsafeAddressOf(word0) // "UnsafePointer(0x7FCD1342ACE0)"
unsafeAddressOf(word1) // "UnsafePointer(0x7FCD13414260)"
Run Code Online (Sandbox Code Playgroud)

3.更多

同时请注意,Stringstruct那个莫名其妙符合AnyObject.

使用Xcode 7 GM Playground和Swift 2.0进行测试.

string value-type memory-address swift

12
推荐指数
1
解决办法
4425
查看次数

标签 统计

swift ×2

memory-address ×1

string ×1

value-type ×1