V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
z0z
V2EX  ›  iOS

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

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

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