使用静态变量与通过视图控制器? iOS版

时间:2017-07-18 18:08:35

标签: ios swift static

我有一个应用程序,它有一个主页面,一个房间页面,然后是一个房间页面的子房间。

要知道详细页面上显示的内容,详细信息页面需要Main页面中的字符串值,而在子房间需要来自房间页面的Room类对象。

我一直把它们设置为我的Room类的静态变量,所以当我需要字符串或对象时我会做

selectedRoomname = Room.selectedName
selectedInstance = Room.selectedInstance

使用segues或使用delegegates传递这些变量是非常可能的,但有没有理由不继续我正在做的事情?考虑到它只有两个变量我正在这样做,我无法想象它会对内存使用产生很大影响。使用静态变量我可以走多远?如果我需要在几乎每个视图控制器上访问变量,例如用户的用户名,配置文件图像等,那么创建静态User类对象是否有任何问题?

tl; dr,使用静态变量有多强烈,是否有滥用它们的事情?

1 个答案:

答案 0 :(得分:2)

实用的原因是它将您限制为Room的一个唯一实例。如果你想要展示超过1个房间,你将不得不重新设计它。这种设计是脆弱和不灵活的。

更哲学的原因是它破坏了OOP。一个班级不应该跟踪自己,这是它的父母的工作(有一个可能的例外单身人士,但这是一个完整的其他can-o-worms)。它还使子类化变得棘手。 LaundryRoom类是否应该拥有自己的静态变量? LaundryRoom类是否也应该使用Room的静态变量?这本质上令人困惑。

我倾向于解决这些问题的方法是从IRL的角度考虑。所有房间都有相同的名字吗?只有1个房间有人居住吗?如果这些属性是实例而不是概念,则它应该是实例变量。