我正在为iOS和安卓开发一个本地应用程序,我注意到了一些让我感兴趣的不同的东西。这不是一个问题,也不是一个bug,也许只是不同平台上的不同行为,但我想了解为什么,如果我错过了什么。
假设有两个Android活动:
Activity1 starts Activity2 and using intents bundle assign its model to Activity2 modeliOS控制器也是如此:
Controller1 starts Controller2 and using segues assign its model to Controller2 model当我在Activity2中修改模型并返回到activity1时,模型没有更新,所以我必须通知此更改(使用广播、委托或其他..)。对于iOS,情况并非如此,因为当我回到Controller1时,模型已经更新了。
为什么会发生这种事?当iOS活动复制时,控制器是否在同一个模型实例上工作?
发布于 2016-05-19 13:07:35
在iOS上,通过引用新的VC传递对象。因此,如果您在第二个VC中更改了该对象的属性,则该更改对第一个VC是可见的,因为它是同一个对象。
在Android上,当您通过Bundle传递对象时,它们是序列化和反序列化的,可以创建一个新对象,因此在原始Activity中看不到更改。当在片段之间传递Parcelable数据时,它们可以通过引用传递,并且更改在原始Fragment中是可见的。
编辑:在Java/中,对象是通过值传递的,而不是通过引用传递的,因此,当将新对象赋值给变量时,旧对象不会在原始片段中更改。但是,如果您更改了它的内部状态(例如属性/字段),那么这将反映在原始片段中。
发布于 2016-05-19 07:39:40
检查您的IOS代码,您将在第一个控制器上找到一个名为"viewWillAppear“的方法,因此该方法将更新您在前一个屏幕上所做的更改。
同样,您可以使用方法"onResume()“在Android中应用,因此实现此方法并将更新任务从"onCreate()”方法编写为"onResume()“方法。
在IOS和安卓系统中,主方法"ViewDidLoad()“和"onCreate()”只在活动或控制器启动时调用一次,然后使用"viewWillAppear“和"onResume”方法进行通知。
看看这个对你有帮助。
发布于 2016-05-19 08:35:19
您注意到的差异是由于使用了两种不同的编程语言。
在Android中,您使用的是Java,而在中,没有任何东西是通过引用传递的,一切都是通过值传递的。对象引用通过值传递。
此外,Java在中是不可变的,所以如果您使用intents将一个字符串传递给Activity2,并且在活动2中修改它,系统将在一个不同的内存地址中分配一个新字符串。
请参阅this参数传递的答案。
希望这能有所帮助
https://stackoverflow.com/questions/37316286
复制相似问题