为啥应用程序在设置属性时会陷入无限循环?

Posted

技术标签:

【中文标题】为啥应用程序在设置属性时会陷入无限循环?【英文标题】:Why app fall into infinite loop when setting a property?为什么应用程序在设置属性时会陷入无限循环? 【发布时间】:2014-07-29 17:47:24 【问题描述】:

1)这是我定义的自定义 UITableViewCell:

class UserTableViewCell: UITableViewCell 

    var ou: OU? 
    set(newOU) 

        println(newOU)

        self.ou = newOU
       

2) 我将 NSManagedObject 传递给单元格

let s = sth.filteredSetUsingPredicate(NSPredicate(format: "someAttribute = true"))
let ou: OU = s.anyObject() as OU
cell.ou = ou

3) 不断写出这个日志信息多次,就像应用陷入死循环一样。

可选((实体:OU;id:0x7a7e3590 ;数据: 一些属性 = 1; ))

结论

基本上我只需要一个简单的存储属性,不需要任何花哨的东西:

class UserTableViewCell: UITableViewCell 

    var ou: OU?

【问题讨论】:

发布错误信息。 想想吧。您正在属性的设置器中设置属性。如果您只想在值更改时打印该值,请使用 willSet 或 didSet。 关于#4 在 SWIFT 中提供 ?变量声明后表明它是可选的。我猜这就是日志所指的内容。您是否尝试过删除它并查看日志中是否仍然出现可选消息? 【参考方案1】:

发生这种情况是因为您编写的 setter 调用了 setter。 self.ou = ... 再次调用setter,所以你得到了一个很好的无限递归。只要堆栈持续存在。

【讨论】:

以上是关于为啥应用程序在设置属性时会陷入无限循环?的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我实现以 2^20 为底的基数排序以对大小为 500 万的数组进行排序时,该程序会陷入无限循环?

尝试使用 Swift 实现无限滚动时陷入无限循环

C合并排序陷入无限循环

为啥我的输出在到达这部分代码时会冻结?

陷入无限循环(骑士之旅问题)

Bash参数解析逻辑陷入无限循环[重复]