我正在开发适用于iOS和Android的原生应用,我注意到一些不同的东西引起了我的兴趣。这不是问题或错误,也许只是在不同平台上的不同行为,但我想了解为什么以及我是否遗漏了某些内容。
假设有2项Android活动:
Activity1 starts Activity2 and using intents bundle assign its model to Activity2 model
iOS控制器也一样:
Controller1 starts Controller2 and using segues assign its model to Controller2 model
当我在Activity2中修改模型并返回到activity1时,模型不会更新,因此我必须通知此更改(使用广播,代理或其他..)。同样不适用于iOS,因为当我返回到Controller1时,模型已经更新。
为什么会这样? iOS控制器是否在同一个模型实例上运行,而Android活动是克隆?
答案 0 :(得分:0)
检查您的IOS代码,您将找到一个名称为" viewWillAppear"在第一个控制器上,所以此方法将更新您在上一个屏幕上所做的更改。
您可以使用方法" onResume()"在Android中应用相同的内容,因此请实施此方法并从" onCreate()"编写更新任务。方法到" onResume()"方法
在IOS和Android中,主要方法是" ViewDidLoad()"和" onCreate()"当活动或控制器启动时只调用一次,然后他们将通过" viewWillAppear"和" onResume"方法
检查这会对您有所帮助。
答案 1 :(得分:0)
您注意到的差异是由于使用了两种不同的编程语言。
在Android中,您使用的是Java,在 Java中没有任何内容通过引用传递,所有内容都按值传递。对象引用按值传递。
此外字符串在Java中是不可变的,因此如果使用intents包将String传递给Activity2,并在Activity 2中修改它,系统会在不同的内存地址中分配新的String。
请参阅this关于Java参数传递的答案。
希望这有帮助
答案 2 :(得分:0)
在iOS上,您通过引用传递对象到新VC。因此,如果您在第二个VC中更改该对象的属性,则该更改对于第一个VC是可见的,因为它是同一个对象。
在Android上,当您通过Bundle
传递对象时,会对其进行序列化和反序列化,可以创建新对象,因此原始Activity
中不会显示更改。在片段之间传递Parcelable
数据时,可以通过引用传递它们,并且更改在原始Fragment
中可见。
修改强>: 在Java / Android中,对象是按值传递的,而不是通过引用传递的,因此当您将新对象分配给变量时,原始片段中的旧对象不会更改。但是如果你改变它的内部状态(例如属性/字段),那么这将反映在原始片段中。