相关疑难解决方法(0)

如何在Swift中调用deinit

我写了一个代码块如下:

class Person{
        let name:String;
        init(name:String){
         self.name = name;
          println("\(name) is being initialized.");
     }

     deinit{
         println("\(name) is being deInitialized.");

    }
 }

var person:Person?;
person = Person(name:"leo");
person = nil;
Run Code Online (Sandbox Code Playgroud)

初始化时,没问题print.设置人员时nil,deinit不调用该方法.

ios swift

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

swift playground/deinit {}中的内存泄漏并未始终如一地调用

在Swift Playground中,ARC对象删除似乎不一致.这是一个bug还是设计?

考虑这个课程:

class Test {
  var name: String
  init(name:String){
    self.name = name
    println("\(name) initialized")
  }
  deinit{
    println("\(name) deinitialized")
  }
}
Run Code Online (Sandbox Code Playgroud)

当我从操场上调用它时(不是命令行REPL,请参阅下面的注释):

var t1 = Test(name: "t1")
var t2 : Test? = Test(name: "t2")
t2 = nil
Run Code Online (Sandbox Code Playgroud)

我在控制台中只看到初始化消息:

t1 initialized
t2 initialized
Run Code Online (Sandbox Code Playgroud)

缺少的是t2的deinit.

当我在app中运行它(例如app delegate的条目)时,输出与ARC删除一致(即t1 init,然后是t2,t2 deinit然后是t1,因为整个调用块超出了范围):

t1 initialized
t2 initialized
t2 deinitialized
t1 deinitialized
Run Code Online (Sandbox Code Playgroud)

最后,在命令行REPL中(请参阅下面的注释以访问REPL),结果是明确的,即:t1由于其顶级范围而处于活动状态,但是t2被ARC删除,正如人们所期望的那样.

  1> class Test {
  2.       var name: String
  3.       init(name:String){
  4.               self.name = name
  5.               println("\(name) initialized")
  6.       }
  7.       deinit{
  8.               println("\(name) deinitialized") …
Run Code Online (Sandbox Code Playgroud)

ios swift

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

快速取消全球化

我的Swift全局变量没有被去初始化.

class Person {
  let name: String
  init(name: String) {
    self.name = name
    println("\(name) is being initialized")
  }
  deinit {
    println("\(name) is being deinitialized")
  }
}

func local() {
  let person = Person(name: "Local")
}

local()

var personp: Person? = Person(name: "Optional Global")
personp = nil

var person = Person(name: "Global")
Run Code Online (Sandbox Code Playgroud)

我使用Xcode6-Beta3 在一个独立的二进制文件中运行它(因为显然游乐场有deinit存在问题)并且禁用了优化:

> xcrun swift -O0 arc.swift && ./arc
Local is being initialized
Local is being deinitialized
Optional Global is being initialized
Optional Global is being deinitialized …
Run Code Online (Sandbox Code Playgroud)

ios swift

5
推荐指数
2
解决办法
2001
查看次数

标签 统计

ios ×3

swift ×3