【问题标题】:Should i strongly hold this property [iOS 7]我应该强烈持有这个属性[iOS 7]
【发布时间】:2014-08-07 07:46:17
【问题描述】:

我通过 segue 将一个对象从 xviewController 传递给 yviewController, 对象 obj 在 xviewController 中被初始化为强属性。

我将对象传递给 yviewController 的属性,它是同一类的指针。 当视图控制器消失时,它仍然指向该地址还是只是将其设置为零。 问题是,我应该将第二个指针定义为弱指针还是强指针?

【问题讨论】:

    标签: objective-c ios7 xcode5


    【解决方案1】:

    正确答案是视情况而定

    首先你要明白强弱的区别。

    简而言之,强引用拥有您使用此属性引用的对象。这意味着编译器将确保该对象在有强引用时不会从内存中删除。如果您有两个对象强烈指向另一个对象,并且其中一个被删除,则第二个对象仍将拥有该对象,因为它拥有它。

    弱引用基本上意味着对象不拥有,它的所有权仍然来自拥有强引用的人,所以如果强引用不存在,那么弱引用将指向nil。如此重复,A 对 X 有一个强引用,B 对 X 有一个弱引用,如果 A 删除这个引用,B 也会失去它..

    所以..回到你的问题,第二个视图控制器的弱或强,这将取决于..第一个视图控制器是否有可能在第二个视图控制器可见时销毁对象?如果发生这种情况,您想保留对象的副本吗?如果展位是的话,把它强。

    如果第一个引用无法销毁,或者您想在第二个视图控制器中反映第一个对象中的更新(更新保留实例),那么弱引用就足够了。

    【讨论】:

    • 我明白了,但我不确定当我执行 segue 时我的第一个视图的控制器是否仍会强烈指向该对象.. 你能看看我的故事板s22.postimg.org/8uime6r69/… 我真的觉得就像我应该使用在共享内存区域中声明的类。因为我将在另外 3 个控制器中使用相同的模型(我希望它是 MVC 中的合法用法)。我做了一些研究,发现了单身人士。与每次切换视图时传递对象相比,这是否是一种明智的方法。
    • 查看您的情节提要,如果您将属性设置为 nil,则第一个 viewController 只会丢失引用。第一个视图控制器不会被释放,所以它不会丢失引用。关于单例,再次取决于你的应用程序的整个概念。我可以在这里解释一下。但我建议你阅读:stackoverflow.com/questions/228164/…
    • 我不小心按了回车键,在编辑过程中不能添加更多的行。所以要完成。我给你的那个问题的答案的一个简单部分是:简单的事情帮助您决定单例: 1 - 它控制对共享资源的并发访问。 2 - 将从系统的多个不同部分请求对资源的访问。 3 - 只能有一个对象(不能有不同的版本)
    【解决方案2】:

    如果我理解正确,那么它应该是strong(默认值)。当第二个视图控制器被销毁时,ARC 会将对象指针分配给 nil 删除一个引用,但是您仍然希望在第一个视图控制器中引用该对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2016-01-10
      相关资源
      最近更新 更多