为啥应用程序在设置属性时会陷入无限循环?
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,所以你得到了一个很好的无限递归。只要堆栈持续存在。
【讨论】:
以上是关于为啥应用程序在设置属性时会陷入无限循环?的主要内容,如果未能解决你的问题,请参考以下文章