V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
z0z
V2EX  ›  iOS

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

  •  
  •   z0z · 2016-10-05 23:07:55 +08:00 · 2184 次点击
    这是一个创建于 3005 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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