z0z
V2EX  ›  iOS

ViewController 之间可以使用属性进行逆向传值吗?

  •  
  •   z0z · Oct 5, 2016 · 3160 views
    This topic created in 3686 days ago, the information mentioned may be changed or developed.

    比如有第 1 个页面 ViewControllerA 和第 2 个页面 ViewControllerB 。 当从第 1 个页面向第 2 个页面传值时可以使用 Property 的方法,但是当从第 2 个页面向第 1 个页面传值时可以使用同样的 Property 方法吗?

    13 replies  •  2016-10-06 18:07:52 +08:00
    timelessg
    timelessg
    Oct 5, 2016 via Android
    1
    delegate & block & target-action
    LINAICAI
    LINAICAI
    Oct 6, 2016
    2
    可以啊,但这样就必须传递一个引用的 vc 给第二个 vc 了,然后在 vc 的生命周期的某个时刻传递回来,但更好的方法就是用 block 和 delegate ,这样 vc 之间耦合降到最低,还能更好的处理相互引用的问题,如果用属性来传递,很容易相互之间的控制器一不小心就相互引用而得不到释放,而 block 和 delegate 就是用副本对象和弱引用来处理的。
    kitalphaj
    kitalphaj
    Oct 6, 2016
    3
    再加一个 notification ,如果你需要支持多 publisher 多 subscriber 的话
    iyeatse
    iyeatse
    Oct 6, 2016 via iPhone
    4
    unwind segue
    zongren
    zongren
    Oct 6, 2016 via Android
    5
    不可以啊,就用 delegate 和 block
    z0z
    z0z
    OP
    Oct 6, 2016
    6
    @timelessg 多谢啊, delegate 的方法刚会使用, block 和 target-action 正在开始学习。
    @LINAICAI 我靠啊,你这几句话解决了困扰我好几天的疑问,虽然还不能完全看懂,但是恍惚能理解一点,我再研究研究。之前我使用 Property 做完 forward 的传数据之后,又如法炮制的加了一些代码企图使用 Property 实现 backward 的传数据,但是编译的时候就没有通过,提示我在 ViewControllerA 中 interface 中定义的那个变量需要使用__weak 来修饰来着,我一看就蒙了,这个技能没听说过啊。
    多谢了啊。

    @kitalphaj 你说的这个我得收藏了,对我来说看起来像是高级的应用,等我掌握了基本应用后再去了解,谢谢啊。
    @iyeatse 之前搜到了这个关键字,但是当时没有仔细看,既然你推荐了,回头我也得仔细的看看,多谢啦。
    @zongren 是啊,我现在只会用 delegate 来 backward 的传输数据,昨晚上刚刚开始了解 block ,当时只是不知道为什么不能使用 Property 来做 backward 的传数据。
    coolmenu
    coolmenu
    Oct 6, 2016
    7
    weak 是弱引用,防止两个 vc 相互引用而不能销毁。
    hstdt
    hstdt
    Oct 6, 2016 via iPhone
    8
    建议搜索 ios 传值方式,那种专门的汇总博文会好些。入门就一个个学着用,用多了才知道在什么时候用什么方式传最好。
    timelessg
    timelessg
    Oct 6, 2016 via Android
    9
    建议找个完整项目找找感觉, oc 可以看 coding , swift 可以看 yep 。
    xi_lin
    xi_lin
    Oct 6, 2016 via iPhone
    10
    block 注意循环引用
    z0z
    z0z
    OP
    Oct 6, 2016
    11
    你們樓上的都是好人。
    xjbeta
    xjbeta
    Oct 6, 2016
    12
    我习惯用 notification 数量多的话 试试 rxswift 之类的(想试试但还没试过)
    z0z
    z0z
    OP
    Oct 6, 2016
    13
    @xjbeta 我一个一个的试试,不过目前只会 oc ,还不会 swift
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4444 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 03:15 · PVG 11:15 · LAX 19:15 · JFK 22:15
    ♥ Do have faith in what you're doing.